1、UIButton貼近右邊,高度固定,寬度跟隨標題變化
class TestButton: UIButton { } class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let btn = TestButton(type: .custom) btn.setTitle("TestButton 1 2 3 sdasdad dadasd", for: .normal) btn.setTitleColor(.black, for: .normal) btn.layer.borderColor = UIColor.red.cgColor btn.layer.borderWidth = 1 view.addSubview(btn) btn.snp.makeConstraints { (make) in make.centerY.equalToSuperview() make.right.equalToSuperview().offset(-20) make.height.equalTo(30) } } }
效果:
2、限制寬度,多了就換行
class TestButton: UIButton { } class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let btn = TestButton(type: .custom) btn.setTitle("TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd", for: .normal) btn.setTitleColor(.black, for: .normal) btn.titleLabel?.numberOfLines = 0 btn.layer.borderColor = UIColor.red.cgColor btn.layer.borderWidth = 1 view.addSubview(btn) btn.snp.makeConstraints { (make) in make.centerY.equalToSuperview() make.right.equalToSuperview().offset(-20) // make.height.equalTo(30) make.width.lessThanOrEqualTo(200) } } }
效果:
明顯,UIButton的框太小了,限制了titleLabel,現在想實現,button的高度和文字高度一樣
修改如下
class TestButton: UIButton { override var intrinsicContentSize: CGSize { return titleLabel!.sizeThatFits(CGSize(width: titleLabel!.preferredMaxLayoutWidth, height: .greatestFiniteMagnitude)) } override func layoutSubviews() { titleLabel?.preferredMaxLayoutWidth = frame.size.width super.layoutSubviews() } } class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let btn = TestButton(type: .custom) btn.setTitle("TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd", for: .normal) btn.setTitleColor(.black, for: .normal) btn.titleLabel?.numberOfLines = 0 btn.layer.borderColor = UIColor.red.cgColor btn.layer.borderWidth = 1 view.addSubview(btn) btn.snp.makeConstraints { (make) in make.centerY.equalToSuperview() make.right.equalToSuperview().offset(-20) // make.height.equalTo(30) make.width.lessThanOrEqualTo(200) } } }
效果:
總結:
Autolayout和intrinsicContentSize有關,UIButton的intrinsicContentSize默認和標題長短沒有關係,和UILabel不一樣