【问题标题】:UIButton does not grow vertically according to length of text insideUIButton 不会根据内部文本的长度垂直增长
【发布时间】:2015-02-18 09:04:44
【问题描述】:

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

 label.numberOfLines = 0

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

【问题讨论】:

  • label.numberOfLines =0; [标签尺寸适合]; label.lineBreakMode=NSLineBreakByWordWrapping;试试这个
  • 我的标签本身没有问题,我有一个问题是按钮不随其子视图(即 UILabel)一起增长
  • @JulianKról 您是创建自己的自定义按钮还是使用默认的 UIButton?
  • 这两种情况都不起作用

标签: ios uibutton autolayout


【解决方案1】:

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

- (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()
}

【讨论】:

  • 覆盖updateViewConstraints 不是hacky,我不认为这是一个苹果错误,但我想他们的意图(为什么?)
  • 我觉得期望 UIButton 与它的标签一起扩展是合理的。值得一提的是,他们将其标记为重复,并且他们引用的错误仍然存​​在,因此它似乎是一个有效的错误。
【解决方案2】:

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

【讨论】:

  • 这个问题是你没有在文本上获得默认的选择/取消选择效果,这是 UIButtons 固有的。
【解决方案3】:

我看到这个问题与UIButton that resizes to fit its titleLabel类似

UIButton 的多行文本也有同样的问题,而且它也有图像。我用sizeThatFits:计算了大小,但是计算的高度错误。

我没有做到UIButtonTypeCustom,而是在按钮的titleLabel 上调用了sizeThatFits:,尺寸较小,宽度较小(由于按钮中的图像):

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 的内部大小方面存在一些错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多