【问题标题】:Programmatically adding a shadow to a UIButton label以编程方式向 UIButton 标签添加阴影
【发布时间】:2011-07-07 22:12:57
【问题描述】:

我正在尝试将 1px 黑色阴影添加到按钮标签,但没有成功。我试过这个:self.setTitleShadowOffset = CGSizeMake(0, -1); 但我得到了:

在非结构或联合的情况下请求成员“setTitleShadowOffset”

任何建议都会非常感谢!

【问题讨论】:

    标签: ios uibutton ios-4.2


    【解决方案1】:

    正确的属性是self.titleLabel.shadowOffset:

    UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];    
    [b setTitleShadowColor:[UIColor purpleColor] forState:UIControlStateNormal];
    b.titleLabel.shadowOffset = CGSizeMake(1.0, 1.0);
    [b setTitle:@"Hello, I'm a Button" forState:UIControlStateNormal];
    b.frame = CGRectMake(10.0, 10.0,300.0, 40.0);
    

    【讨论】:

    • shadowColor 线没有像您想象的那样工作。您需要使用setShadowColor:forState:(使用此示例您不会注意到失败,因为它将阴影颜色设置为黑色,这是默认设置。)
    • 感谢@ArtOfWarfare。还没有在 iOS 6 中尝试过,并且行为可能已经改变。我会测试并更新代码。
    • @Felz,它从来没有像你想象的那样表现。阴影颜色一直是庄严的,就像整个 iOS 中的其他颜色属性一样,这意味着它们会在状态更改时立即重置为默认颜色(IE,因为它们被点击或突出显示),除非您使用他们的 setColor:forState: 方法。在这种特殊情况下,您只是没有注意到它,因为阴影的默认颜色是黑色。
    【解决方案2】:

    其他答案没有正确设置阴影颜色(我怀疑他们没有注意到,因为他们试图将阴影颜色设置为默认的黑色。)

    这段代码对我的按钮文本添加了一个白色阴影:

    myButton.titleLabel.shadowOffset = CGSizeMake(0, 1);
    [myButton setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal];
    

    【讨论】:

    • 设置 myKey.titleLabel.shadowColor 确实不起作用!
    • 你不能使用属性来设置它——你需要使用完整的方法来设置它,否则你会离开 forState (意味着当状态改变时,它会失去你设置的颜色。 ) 我提供的代码 sn-p 应该可以工作。
    • 这是迄今为止最好的解决方案,只是想指出正确的方法是使用 CGSizeMake 而不是 CGSize
    • 有点好笑 - 在我发布此问题 3 年后,在提出问题近 5 年后,它终于被标记为正确答案。
    【解决方案3】:

    UIButtonsetTitleShadowOffset 已弃用。使用UIButton的titleLabel属性的shadowOffset

    buttonName.titleLabel.shadowOffset = CGSizeMake(0, -1);

    【讨论】:

      【解决方案4】:

      在 Swift 3.0 中

      myButton.titleLabel?.layer.shadowRadius = 3
      myButton.titleLabel?.layer.shadowColor = UIColor.black.cgColor
      myButton.titleLabel?.layer.shadowOffset = CGSize(width: 0, height: 1)
      myButton.titleLabel?.layer.shadowOpacity = 0.5
      myButton.titleLabel?.layer.masksToBounds = false
      

      【讨论】:

      • 这不会在实际文本上设置阴影。
      • 我一定是弄错了。很抱歉!
      【解决方案5】:

      对于 Swift 3:

        button.setTitleShadowColor(UIColor.red, for: .normal)
        button.titleLabel?.shadowOffset = CGSize(width: 2, height: 2)
      

      【讨论】:

        【解决方案6】:

        下面是如何在 Objective-C 中使用 radius 属性为按钮标题添加阴影:

        #import <QuartzCore/QuartzCore.h>    
        
        button.titleLabel.layer.shadowOffset = CGSizeMake(2.0, 2.0);
        button.titleLabel.layer.shadowColor = [UIColor colorWithWhite:0.1 alpha:0.7].CGColor;
        button.titleLabel.layer.shadowRadius = 2.0;
        button.titleLabel.layer.shadowOpacity = 1.0;
        button.titleLabel.layer.masksToBounds = NO;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多