【发布时间】:2014-12-15 18:41:36
【问题描述】:
我试图弄清楚如何调整我的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)
并通过直接使用上面计算的rect 设置UIButton 的frame:
button.frame = CGRectMake(0, 0, self.view.frame.width, rect.height)
但是,我无法影响按钮视图的高度。我偶然能够改变高度的唯一方法是摆弄NSLayoutConstraint 的multiplier 属性,但它会以不可预知的方式改变高度。
有人知道怎么做吗?
编辑
我应该补充一点,文本通过NSLineBreakMode.ByWordWrapping 成功换行。这是我的完整按钮结构:
let button = UIButton.buttonWithType(.System) as UIButton
button.setTitle(title, forState: .Normal)
button.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
button.titleLabel?.textAlignment = NSTextAlignment.Center
button.setTranslatesAutoresizingMaskIntoConstraints(false)
这是问题的截图: http://i.imgur.com/dEJVRxc.png
【问题讨论】:
-
你试过将 lineNumber 设置为 0 吗?
-
@Aggressor 是的,我有。刚刚又试了,没有效果。
-
编辑框架和约束是一项冒险的事情。每当视图刷新时,它将覆盖您的框架以设置约束。我怀疑您有限制按钮的约束。尝试从界面构建器中删除按钮并在 viewDidAppear 块中以编程方式创建它。
-
您的另一个选择是通过代码更改按钮上的约束
-
@Aggressor 我实际上并没有为此使用 Interface Builder。所有视图和约束都是以编程方式生成的。我在上面的问题中粘贴的高度约束似乎没有任何效果,除非
multiplier被更改。我希望我能够使用该约束的constant属性来改变高度,但没有运气。