UIButton根据标题(Swift)调整视图高度

时间:2014-12-15 18:41:36

标签: ios swift uiview uibutton

我正在尝试弄清楚如何调整UIButton帧的高度,使其与给定宽度的TitleLabel内容的高度相匹配。我目前正在viewDidAppear执行此操作。

我试图通过NSLayoutConstraint执行以下操作:

let attributeString = NSAttributedString(string: button.titleForState(.Normal)!)
let rect = attributeString.boundingRectWithSize(CGSizeMake(self.view.frame.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)

var heightConstraint = NSLayoutConstraint(item: button, attribute: .Height, relatedBy: .Equal, toItem: button, attribute: .Height, multiplier: 1.0, constant: rect.height)

并使用上面计算的frame直接设置UIButton的{​​{1}}:

rect

但是,我无法影响按钮视图的高度。我偶然能够改变高度的唯一方法是摆弄button.frame = CGRectMake(0, 0, self.view.frame.width, rect.height) 的{​​{1}}属性,但它正在不可预测地改变高度。

有谁知道怎么做?

修改

我应该添加文本通过multiplier成功包装。这是我的完整按钮结构:

NSLayoutConstraint

以下是问题的屏幕截图: http://i.imgur.com/dEJVRxc.png

1 个答案:

答案 0 :(得分:1)

我找不到任何好的“自动”方式来做到这一点。对我有用的方法是在UIButton子类中覆盖setTitle:forState:并计算用于调整高度约束的文本的大小。该按钮具有高度约束(具有IBOutlet heightCon),并且还具有在IB中设置的宽度约束(如果您不使用IB,则可以在代码中添加这些约束)

override func setTitle(title: String?, forState state: UIControlState) {
        super.setTitle(title, forState: state)
        let attributeString = NSAttributedString(string: currentTitle!, attributes: [NSFontAttributeName: titleLabel!.font])
        let rect = attributeString.boundingRectWithSize(CGSizeMake(self.frame.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)
        heightCon.constant = rect.size.height + titleEdgeInsets.top + titleEdgeInsets.bottom
    }