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
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容