以编程方式向UIButton标签添加阴影

19

我试图给一个按钮标签添加1像素的黑色阴影,但一直没有成功。我尝试了这个代码:self.setTitleShadowOffset = CGSizeMake(0, -1);,但是我得到了以下错误信息:

请求访问非结构体或联合体的成员“setTitleShadowOffset”

有什么好的建议吗?谢谢!

6个回答

37

正确的属性是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);

4
shadowColor这行代码并不能像你想的那样生效,你需要使用setShadowColor:forState:方法(使用这个示例你可能不会注意到失败,因为它将阴影颜色设置为默认的黑色)。 - ArtOfWarfare
感谢@ArtOfWarfare。我还没有在iOS 6上尝试过这个,行为可能已经改变了。我会测试并更新代码。 - fsaint
1
@Felz,它从来没有按照你想象的那样运作。阴影颜色一直都是庄重的,就像iOS中的其他颜色属性一样,这意味着它们会在状态改变时重置为默认颜色(例如,因为被点击或高亮),除非您使用它们的setColor:forState:方法。您之所以在这种特定情况下没有注意到它,是因为阴影的默认颜色是黑色。 - ArtOfWarfare

23

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

这段代码对我有用,可以将我的按钮文本添加一个白色阴影:

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

设置 myKey.titleLabel.shadowColor 实际上并没有起作用! - Berik
你不能使用属性来设置它 - 你需要使用完整的方法来设置它,否则当状态改变时,你会遗漏掉 forState(意味着当状态改变时,你设置的颜色将会丢失)。我提供的代码片段应该可以工作。 - ArtOfWarfare
这是目前最好的解决方案,只想指出正确的做法是使用CGSizeMake而不是CGSize。 - Alejandro Luengo
2
有点有趣 - 在我发布这篇文章三年后,也就是问题被提出将近五年后,它终于被标记为正确答案。 - ArtOfWarfare

10

setTitleShadowOffset 方法对于 UIButton 已经被弃用。使用 UIButtontitleLabel 属性中的 shadowOffset 替代。

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


8

在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

enter image description here


这不会对实际文本产生影响。 - Sami Samhuri
我一定是搞错了。对不起! - Sami Samhuri

1

对于Swift 3:

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

0

以下是如何在Objective-C中为按钮标题添加阴影的代码,其中包括半径属性:

#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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接