Iphone 如何调整UIButton的大小以适应文本而不使其超出屏幕?
我有一个UIButton,我想调整它的大小以适应里面的任何文本。它的设置宽度为280,但文本应换行到下一行,并根据需要延长按钮的高度Iphone 如何调整UIButton的大小以适应文本而不使其超出屏幕?,iphone,uibutton,Iphone,Uibutton,我有一个UIButton,我想调整它的大小以适应里面的任何文本。它的设置宽度为280,但文本应换行到下一行,并根据需要延长按钮的高度 我已将换行符设置为Word Wrap,并尝试了sizeToFit,但这只会使按钮变宽,而不是垂直。您可能需要查看,其中包括限制为特定宽度或框大小的字体测量方法 例如,设置按钮标题时,可以使用sizeWithFont:forWidth:lineBreakMode:方法测量字符串,并根据返回的大小更新按钮框架(可能允许在边缘周围添加一些填充) 对不起,我没有一个具体的
我已将换行符设置为Word Wrap,并尝试了sizeToFit,但这只会使按钮变宽,而不是垂直。您可能需要查看,其中包括限制为特定宽度或框大小的字体测量方法 例如,设置按钮标题时,可以使用sizeWithFont:forWidth:lineBreakMode:方法测量字符串,并根据返回的大小更新按钮框架(可能允许在边缘周围添加一些填充)
对不起,我没有一个具体的例子给你。我设法让它在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;
确保按以下方式设置按钮上的文本:
[myButton setTitle:@"my title" forState:UIControlStateNormal];
。。。而且
[myButton sizeToFit]
应该可以很好地工作。[button sizeToFit]
对我不起作用,但我找到了一种单独使用IB的方法(xcode 4.5):
ui按钮
拖动到1000(对于两者)
约束下
单击宽度
并将优先级
更改为250ui按钮
的inset
控制左/右/上/下填充我一直面临着类似的问题,我的按钮宽度有限,希望它们垂直增长,这取决于我给它们的文本量。 根据我在苹果文档中学到的知识,我最终得出了一个简单的解决方案() 我已将
UIButton
子类化并重写了两个函数:
- (void)setBounds:(CGRect)bounds {
if (!CGRectEqualToRect(bounds, self.bounds)) {
[self invalidateIntrinsicContentSize];
}
[super setBounds:bounds];
}
- (CGSize)intrinsicContentSize {
//
CGSize size;
self.titleLabel.frame = CGRectMake(self.titleLabel.frame.origin.x,
self.titleLabel.frame.origin.y,
self.frame.size.width - self.contentEdgeInsets.left - self.contentEdgeInsets.right - self.titleEdgeInsets.left - self.titleEdgeInsets.right,
0);
size = [self.titleLabel sizeThatFits:self.titleLabel.frame.size];
size = CGSizeMake(size.width, size.height + 20);
return size;
}
这里基本上发生的是,按钮使其内部大小无效(仅当边界集实际上是新的时——这是为了防止无休止的循环),当系统要求内部内容大小时,我根据按钮的宽度重新计算。额外的20px高度用于填充。
我尝试过很多其他的方法,但是由于我的布局都是基于自动布局的,所以我想要的东西不必在设备旋转时更新。这很管用
祝你好运!
Z.我认为这在type=custom的按钮上可能无法正常工作。您是否尝试使用插图?如果我使用插入,在计算预期宽度时,autolayout似乎没有考虑到这一点,因此即使按钮宽度增加,但它不足以容纳文本+左右插入内容插入,而不是标题插入