我看过很多类似的问题,但没有人得到我想要的答案。当我使用此代码制作UIButton并将其设置为titleLabel时,会出现UIButton,但不会出现titleLabel。
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
button.titleLabel.text = @"Title";
button.titleLabel.font = [UIFont fontWithName:@"System-Bold" size:25.0f];
[self.view addSubview:button];
此代码显示按钮,但不显示titleView,它的标题。为什么会这样?我正在为iOS 6及更高版本开发。
注1:我不是在寻找这样的选项:
[button setTitle:@"Title" forState:UIControlStateNormal];
因为我必须使用titleLabel来设置它的font和fontSize。
注意2:我无法创建UILabel并将其添加为按钮的子视图。由于该按钮后来是动画。
答案 0 :(得分:80)
更新按钮标题时总是需要指定ControlState! UIButtons有四个可能的值:
UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateSelected
所以例如:
[button setTitle:@"Title" forState:UIControlStateNormal];
然后您可以为titleLabel设置自定义设置:
[button.titleLabel setFont:[UIFont fontWithName:@"Zapfino" size:20.0]];
[button.titleLabel setTextColor:[UIColor blueColor]];
答案 1 :(得分:9)
[button setTitle:@"Title" forState:UIControlStateNormal];
设置标题字符串的正确方法。
titleLabel用于设置字体和颜色。
答案 2 :(得分:3)
尝试使用...
[button setNeedsLayout];
[button layoutIfNeeded];
它会强制按钮更新布局。
答案 3 :(得分:1)
答案 4 :(得分:0)
尽管此属性是只读的,但其自身的属性是读/写的。主要使用这些属性来配置按钮的文本。例如:
UIButton *button = [UIButton buttonWithType: UIButtonTypeSystem];
button.titleLabel.font = [UIFont systemFontOfSize: 12];
button.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
请勿使用标签对象设置文本颜色或阴影颜色。而是使用此类的setTitleColor(:for :)和setTitleShadowColor(:for :)方法进行更改。要设置标签的实际文本,请使用setTitle(_:for:)(button.titleLabel.text不允许您设置文本)。 即使尚未显示按钮,titleLabel属性也会返回一个值。对于系统按钮,该属性的值为nil。
迅速:
button.setTitle("your text", for: .normal)
button.setTitleColor(.white, for: .normal)
答案 5 :(得分:0)
TLDR-试试这个saveButton.titleLabel?.layer.zPosition = 10
对我来说这真是令人沮丧。我以编程方式创建了一个UIButton,添加了约束,并添加了渐变背景(这就是造成我问题的原因……我认为)。然后我需要更新字体:
saveButton.titleLabel?.font = UIFont.systemFont(ofSize: 20, weight: .semibold)
saveButton.setTitle("Save", for: .normal)
注意,我以正确的方式设置了标题。但仍然没有标题显示。最疯狂的部分-当我单击“调试视图层次结构”时,我可以在那里看到标题!如果我没有更改字体,标题也会显示出来。令人困惑。然后我添加了这个(字面意思是意大利面,看看有什么卡住了):
saveButton.titleLabel?.layer.zPosition = 10
有效。似乎是渐变背景,设置字体等的某种组合将按钮的内部标题标签放在其层的底部。