UIButton标签文本正在被剪裁

问题描述 投票:38回答:6

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

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

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

this...label

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

iphone cocoa-touch uibutton
6个回答
65
投票

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

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

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


28
投票

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

目标C:

[myButton setTitle:@"This is the text" forState:UIControlStateNormal];

或者在Swift中:

myButton.setTitle("This is the text", for: .normal)

20
投票

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

button.titlelabel.minimumFontSize = 8.0; // or some more adequate size
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES;

8
投票

在你的按钮上调用sizeToFit。这将调整按钮的大小以适合文本。


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

0
投票

Swift 4.2中的解决方案

yourButton.titleLabel?.minimumScaleFactor = 0.5 //set whatever you want here to scale
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true
© www.soinside.com 2019 - 2024. All rights reserved.