UIButton 文字换行的一种方案

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

}

你可能感兴趣的:(UIButton 文字换行的一种方案)