我正在尝试弄清楚如何调整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
答案 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
}