可以让UIButton sizeThatFits工作吗?

时间:2015-03-16 22:44:02

标签: ios uibutton uikit

我一直在使用一种调整我的UIButton大小的方法,这种方法已经过折旧,而且不是很强大。出于这个原因以及其他原因,我想让sizeThatFits适用于UIButtons。从我在网上看到的,我不确定它是否应该起作用(似乎它适用于某些人,但不是其他人,可能是风格之间的区别,我使用自定义)。

这是我的简单测试代码,用于重新创建问题(我只是将它放在viewDidLoad中进行测试,但无关紧要,我的真实代码是大型项目的一部分):

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:@"This is a test with a long title that will need to word wrap to more than a single line when displayed on my tiny iPod in portrait view." forState:UIControlStateNormal];
btn.titleLabel.lineBreakMode = UILineBreakModeWordWrap; // depreciated - but nothing to replace it?
CGRect r = btn.frame;
r.origin.x = 0;
r.origin.y = 0;
r.size.width = 320;
r.size.height = [btn.titleLabel.text sizeWithFont:btn.titleLabel.font constrainedToSize:CGSizeMake(r.size.width,100000) lineBreakMode:btn.titleLabel.lineBreakMode].height; // Returns approx 86 and changes correctly if I change the title text
r.size.height = [btn sizeThatFits:CGSizeMake(r.size.width,CGFLOAT_MAX)].height; // returns 34 no matter what
btn.frame = r;

sizeWithFont行是我一直在做的,它可以工作,但它不是要求实际控制的大小,所以不是很安全,也已经折旧了。 sizeThatFits行是我想要的工作,但它总是返回34,无论什么(可能是按钮的推荐/默认高度)。

我一直在使用相同的sizeWithFont来调整UILabel和其他一些控件的大小。我已经更新它们以使用sizeThatFits并且它们工作得很好,只是UIButton与其他工作不同。 我希望有一个简单的解决方法,比如设置UIButton的属性,以使其正常工作?

我的应用只需要支持iOS 8+,而不是旧版本。

更新:根据此处How do I resize a UIButton to fit the text without it going wider than the screen?的评论和接受的答案,似乎我们可能会遇到sizeWithFont或其他低于标准的解决方案......当然。

1 个答案:

答案 0 :(得分:1)

我使用UIButton titleLabel而不是UIButton进行了修复。

button.titleLabel?.sizeThatFits(labelFitSize)

代替

button.sizeThatFits(labelFitSize)

好消息是它起作用了,如果按钮显示为contentInsets或图像,则您需要自己处理坏消息...