UIButton titleLabel不显示

时间:2013-05-20 19:31:37

标签: iphone ios ios6 uibutton

我看过很多类似的问题,但没有人得到我想要的答案。当我使用此代码制作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并将其添加为按钮的子视图。由于该按钮后来是动画。

6 个答案:

答案 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)

如果在情节提要中带有来自像我这样的资产的自定义按钮图片

签到属性检查器

Asset image as image

签到属性检查器将资产图像设置为背景

Asset image as back ground image

答案 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

有效。似乎是渐变背景,设置字体等的某种组合将按钮的内部标题标签放在其层的底部。