我在Interface Builder中内置了一个UIButton,它有一个默认标签。在Xcode中,我正在动态更改标签文本:
myButton.titleLabel.text = @"this is the new label";
但是,当文本更新时,新字符串将被剪裁为与原始字符串相同的大小,最终看起来像:
this...label
任何人都知道为什么会这样吗?
答案 0 :(得分:64)
您应该使用setTitle:forState:来更改UIButton
的标题。如果您自己更改标题,该按钮不会显示需要调整标签大小 - 您最终必须执行以下操作:
myButton.titleLabel.text = @"this is the new label";
[myButton setNeedsLayout];
但我甚至不确定它会在所有情况下都有效。提供了setTitle:forState:
之类的方法,这样您就可以为多个状态提供标题,而无需手动更新按钮,这样按钮就知道需要使用新标题进行布局。
答案 1 :(得分:27)
尝试使用按钮的setTitle方法(而不是直接在标签上设置标题)。它应该强制标题标签的大小调整。
目标C:
[myButton setTitle:@"This is the text" forState:UIControlStateNormal];
或者在Swift中:
myButton.setTitle("This is the text", for: .normal)
答案 2 :(得分:20)
另一种解决方案是让UIButton的内部UILabel缩小字体大小,就像UILabels所做的那样:
button.titlelabel.minimumFontSize = 8.0; // or some more adequate size
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES;
答案 3 :(得分:8)
按下按钮上的sizeToFit
。这将调整按钮的大小以适合文本。
答案 4 :(得分:1)
如果不起作用,您可以随时确定字符串大小并调整按钮框架宽度。在这种情况下,你确定它适合。
// Calculate the size
CGSize buttonSize = [@"My text.." sizeWithFont:[UIFont systemFontOfSize:15.0]
constrainedToSize:someSize lineBreakMode:UILineBreakModeWordWrap];
// Do whatever you want with the "buttonSize", you can for example adjust your button's frame width
答案 5 :(得分:1)
这对我有用,同时在所有其他限制条件下以编程方式设置了我的按钮。
yourButton.widthAnchor.constraint(equalToConstant: yourButton.intrinsicContentSize.width).isActive = true
您还可以像这样添加“填充”
yourButton.contentEdgeInsets = UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
答案 6 :(得分:0)
Swift 4.2中的解决方案
yourButton.titleLabel?.minimumScaleFactor = 0.5 //set whatever you want here to scale
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true