UIButton标签文本正在被剪裁

时间:2011-01-01 23:39:12

标签: iphone cocoa-touch uibutton

我在Interface Builder中内置了一个UIButton,它有一个默认标签。在Xcode中,我正在动态更改标签文本:

myButton.titleLabel.text = @"this is the new label";

但是,当文本更新时,新字符串将被剪裁为与原始字符串相同的大小,最终看起来像:

this...label

任何人都知道为什么会这样吗?

7 个答案:

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