有时,需要设置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
}
}