根据文本内部的长度,UIButton不会垂直增长

时间:2014-12-19 12:09:42

标签: ios uibutton autolayout

创建一个按照文本集标题长度垂直增长的按钮时遇到问题。我见过similar problem但该解决方案在这种情况下不起作用。当我设置:

 label.numberOfLines = 0

然后有可能显示多行文字,但这不会影响按钮高度本身。有没有人遇到过这个问题,并找到了很好的通用解决方案。我希望避免为按钮的内在大小等硬编码一些值。

3 个答案:

答案 0 :(得分:2)

我自己遇到了这个并通过向按钮添加高度约束并覆盖updateViewConstraints来解决它。有点hacky。

- (void)updateViewConstraints
{
    self.myButtonHeightConstraint.constant = self.myButton.titleLabel.frame.size.height;
    [super updateViewConstraints];
}

我还向Apple提交了一个关于UIButton没有调整大小以适应它的UIButtonLabel的错误。


2017版代码:

override func updateConstraints() {

    let h = titleLabel!.frame.size.height
    self.heightAnchor.constraint(equalToConstant: h).isActive = true
    super.updateConstraints()
}

答案 1 :(得分:1)

我通过创建自己的按钮,添加标签和设置约束来解决问题,标签的大小决定了按钮的大小。

答案 2 :(得分:1)

我发现这与jsfiddle

类似

我遇到了带有多行文字的UIButton同样的问题,而且还有一张图片。我使用sizeThatFits:来计算尺寸,但计算出错误的高度。

我没有将其设为UIButtonTypeCustom,而是在按钮的sizeThatFits:上调用了titleLabel,其宽度更小(由于按钮中的图像):

CGSize buttonSize = [button sizeThatFits:CGSizeMake(maxWidth, maxHeight)];
CGSize labelSize = [button.titleLabel sizeThatFits:CGSizeMake(maxWidth - offset, maxHeight)]; // offset for image
buttonSize.height = labelSize.height;
buttonFrame.size = buttonSize;

然后我使用那个大小的高度来正确设置按钮的框架,并且它工作了:)

也许他们在UIButton的内部大小调整中存在一些错误。