36

我已经看到了一堆类似的问题,但没有人得到我正在寻找的答案。当我使用此代码制作 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来设置它的字体和fontSize。

注意 2:我无法创建 UILabel 并将其添加为按钮的子视图。由于按钮稍后会制作动画。

4

6 回答 6

83

更新按钮标题时,您总是需要指定 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]];
于 2013-05-20T19:46:06.980 回答
10
[button setTitle:@"Title" forState:UIControlStateNormal];

是设置标题字符串的正确方法。

titleLabel 用于设置字体和颜色。

于 2013-05-20T19:34:43.330 回答
3

尝试使用...

[button setNeedsLayout];
[button layoutIfNeeded];

它将强制按钮更新布局。

于 2014-10-14T14:14:04.803 回答
2

如果在故事板中带有来自像我这样的资产的自定义按钮图像

签入属性检查器

资产图像作为图像

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

资产图像作为背景图像

于 2020-03-27T08:34:11.213 回答
1

虽然这个属性是只读的,但它自己的属性是读/写的。主要使用这些属性来配置按钮的文本。例如:

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)
于 2018-10-07T09:27:34.693 回答
0

TLDR -试试这个saveButton.titleLabel?.layer.zPosition = 10

这对我来说是一个令人沮丧的事情。我以编程方式创建了一个 UIButton,添加了约束,并添加了渐变背景(这就是导致我的问题的原因......我认为)。然后我需要更新字体:

saveButton.titleLabel?.font = UIFont.systemFont(ofSize: 20, weight: .semibold)
saveButton.setTitle("Save", for: .normal)

请注意,我正在以正确的方式设置标题。但是,仍然没有显示标题。最疯狂的部分——当我点击“Debug View Hierarchy”时,我可以在那里看到标题!如果我没有更改字体,标题也会显示。令人困惑。然后我添加了这个(字面意思是扔意大利面,看看卡住了什么):

saveButton.titleLabel?.layer.zPosition = 10

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

于 2020-09-04T21:45:17.797 回答