有时,需要设置
UIButton
中文字的换行,来满足按钮的多样化。
例如:点击按钮跳转设置「地理位置」,完成后,地理位置显示在按钮上。
通常,会设置按钮内的
titleLabel
可以换行:button.titleLabel?.numberOfLines = 0 button.titleLabel?.lineBreakMode = .byWordWrapping
这样设置的
titleLabel
在「水平方向」会使UIButton
跟随其扩大,但在「垂直方向」反而会超出UIButton
的大小,并不会对UIButton
进行高度的增加。
如果需要
UIButton
的大小跟随titleLabel
换行而改变,可以采取自定义UIButton
的方式:
import UIKit
class CompactButton: UIButton {
override var intrinsicContentSize: CGSize {
titleLabel?.numberOfLines = 0
var size: CGSize = self.bounds.size
if let titleLabel = self.titleLabel {
size = CGSize(width: self.bounds.width + self.titleEdgeInsets.left, height: titleLabel.bounds.height)
}
return size
}
override func layoutSubviews() {
super.layoutSubviews()
titleLabel?.numberOfLines = 1
var preferredMaxLayoutWidth = self.bounds.width - self.titleEdgeInsets.left
if let imageView = self.imageView {
preferredMaxLayoutWidth -= imageView.bounds.width
}
titleLabel?.preferredMaxLayoutWidth = preferredMaxLayoutWidth
}
}