UIButton标签文本正在被剪裁

the*_*ick 38 iphone cocoa-touch uibutton

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

myButton.titleLabel.text = @"this is the new label";
Run Code Online (Sandbox Code Playgroud)

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

this...label
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ers 65

您应该使用setTitle:forState:来更改a的标题UIButton.如果你自己更改标题,按钮没有任何迹象表明它需要调整标签大小 - 你最终必须做这样的事情:

myButton.titleLabel.text = @"this is the new label";
[myButton setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)

但我甚至不确定它会在所有情况下都有效.setTitle:forState:提供类似的方法,以便您可以为多个状态提供标题,而无需手动更新按钮,以便按钮知道它需要使用新标题进行布局.


Ian*_*Ian 28

尝试使用按钮的setTitle方法(而不是直接在标签上设置标题).它应该强制标题标签的大小调整.

目标C:

[myButton setTitle:@"This is the text" forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

或者在Swift中:

myButton.setTitle("This is the text", for: .normal)
Run Code Online (Sandbox Code Playgroud)

  • +1 为完美答案。我尝试了上面给出的所有两种选择。但除了这个答案,不能解决我的问题。 (2认同)

Gui*_*ent 20

另一种解决方案是让UIButton的内部UILabel缩小字体大小,因为UILabels可以这样做:

button.titlelabel.minimumFontSize = 8.0; // or some more adequate size
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES;
Run Code Online (Sandbox Code Playgroud)

  • 注意:`minimumFontSize`现在已弃用.请改用"minimumScaleFactor".即使用'minimumScaleFactor = 1.0;`完全停止缩减 (4认同)

Jas*_*ien 8

打电话sizeToFit给你的按钮.这将调整按钮的大小以适合文本.