我有一个UIButton,我想调整大小以适应其中的任何文本。它的设置宽度为280,但文本应该换行到下一行,并根据需要扩展按钮的高度。
我已经为Word Wrap设置了换行符并尝试了sizeToFit,但这只会让按钮更宽,而不是垂直。
答案 0 :(得分:33)
确保以这种方式设置按钮上的文字:
[myButton setTitle:@"my title" forState:UIControlStateNormal];
...... [myButton sizeToFit]
应该像魅力一样。
答案 1 :(得分:7)
[button sizeToFit]
对我不起作用,但我找到了一种单独使用IB的方法(xcode 4.5):
UIButton
content hugging
拖动到1(水平和垂直)compression resistance
拖至1000(两者都是)constraints
下点击Width
并将priority
更改为250 UIButton
的{{1}}来控制左/右/上/下的填充答案 2 :(得分:2)
您可能需要查看UIKit Additions to NSString documentation,其中包括限制为特定宽度或框大小的字体测量方法。
当您设置按钮的标题时,您可以使用 sizeWithFont:forWidth:lineBreakMode:方法测量字符串,并根据返回的大小更新按钮的框架(可能允许一些在边缘附近填充。)
抱歉,我没有具体的例子。
答案 3 :(得分:2)
我设法让它在UIButton类别中工作:
@interface UIButton (ExpandsVertically)
- (CGSize)sizeThatFits:(CGSize)size;
@end
@implementation UIButton (Expandable)
- (CGSize)sizeThatFits:(CGSize)size {
// for the width, I subtract 24 for the border
// for the height, I use a large value that will be reduced when the size is returned from sizeWithFont
CGSize tempSize = CGSizeMake(size.width - 24, 1000);
CGSize stringSize = [self.titleLabel.text
sizeWithFont:self.titleLabel.font
constrainedToSize:tempSize
lineBreakMode:UILineBreakModeWordWrap];
return CGSizeMake(size.width - 24, stringSize.height);
}
@end
如果有人使用此功能,请务必设置:
myButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
答案 4 :(得分:0)
我一直面临着类似的问题,我的按钮宽度有限,并希望它们垂直增长,具体取决于我给他们的文字数量。 我最终得到了一个简单的解决方案,基于我在Apple文档中学到的内容(https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ImplementingView/ImplementingView.html)
我已经将[{1}}子类化并覆盖了两个函数:
UIButton
这里基本上发生的是按钮使其内在大小无效(仅当边界集实际上是新的 - 这是为了防止无限循环),并且当系统要求内在内容大小时,我重新计算基于在按钮的宽度上。额外的20px高度用于填充。 我已经尝试了很多其他方法,但由于我的布局都是基于AutoLayout,我想要的东西是我不必在设备旋转时更新。这很简单。
祝你好运! ž。