我在xib中设置了UIView
,其中有四个按钮。文本左对齐,所有这些内容的左边缘内容插图设置为20。限制可以在下面看到:
对于iPhone 4和5的宽度,xib的宽度设置为320.当此视图添加到视图控制器时,我将框架的宽度设置为与当前屏幕尺寸相同,例如iPhone6和按钮将水平拉伸。现在,当我设置标题文本时,我希望按钮的高度增加以容纳文本。
我将UIButton子类化并覆盖了这个方法:
override func intrinsicContentSize() -> CGSize {
let labelSize = titleLabel?.sizeThatFits(CGSizeMake(self.frame.size.width, CGFloat.max)) ?? CGSizeZero
let desiredButtonSize = CGSizeMake(labelSize.width + titleEdgeInsets.left + titleEdgeInsets.right, labelSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom)
return desiredButtonSize
}
然后根据需要设置标题标签。对于iPhone6及以上版本,它可以完美运行:
然而,对于iPhone 4或5,我得到了这个结果:
任何想法我可能在这方面做错了什么?真的很感激一些指针。谢谢!
答案 0 :(得分:1)
我不认为您想使用按钮的框架来确定标题的大小。你想使用标题的框架。 titleLabel?.sizeThatFits(CGSizeMake(self.frame.size.width, CGFloat.max))
将确定标签的高度,就像标签宽度是按钮框架的整体一样。但是你有一个插页不允许标题以这种方式布局,所以它正在估计高度。这是你的标签溢出按钮边界的方式。它应该是:
override func intrinsicContentSize() -> CGSize {
let labelSize = titleLabel?.sizeThatFits(CGSizeMake((self.titleLabel?.frame.size.width)!, CGFloat.max)) ?? CGSizeZero
let desiredButtonSize = CGSizeMake(labelSize.width + titleEdgeInsets.left + titleEdgeInsets.right, labelSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom)
return desiredButtonSize
}
修改强>
根据您的限制,您可能还需要
override func layoutSubviews() {
super.layoutSubviews() self.titleLabel?.preferredMaxLayoutWidth = self.frame.size.width
}