我在 xib 中有一个 UIView
设置,里面有四个按钮。文本左对齐,所有内容的左边缘内容插图设置为 20。约束如下所示:
对于 iPhone 4 和 5 的宽度,xib 的宽度设置为 320。当这个 View 被添加到 View Controller 时,我使框架的宽度与当前屏幕尺寸相同,例如iPhone6 和按钮会水平拉伸(stretch)。现在,当我设置标题文本时,我希望按钮的高度增加以容纳文本。
我子类化了 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 我得到这个结果:
知道我在这方面可能做错了什么吗?非常感谢一些指点。谢谢!
最佳答案
我认为您不想使用按钮的框架来确定标题适合的大小。你想使用标题的框架。 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
}
关于ios - UIButton 无法针对 iPhone 4/5 屏幕尺寸正确调整文本大小。 (使用内在内容大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38372415/