Multiline UIButton and autolayout

后端 未结 16 1512
无人共我
无人共我 2020-12-03 13:08

I have created a view controller that looks like this:

\"enter

I want the two

16条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-03 13:47

    None of the other answers had everything working for me. Here's my answer:

    class MultilineButton: UIButton {
        func setup() {
            titleLabel?.textAlignment = .center
            titleLabel?.numberOfLines = 0
            titleLabel?.lineBreakMode = .byWordWrapping
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            setup()
        }
    
        override init(frame: CGRect) {
            super.init(frame: frame)
            setup()
        }
    
        override var intrinsicContentSize: CGSize {
            var titleContentSize = titleLabel?.intrinsicContentSize ?? CGSize.zero
            titleContentSize.height += contentEdgeInsets.top + contentEdgeInsets.bottom
            titleContentSize.width += contentEdgeInsets.left + contentEdgeInsets.right
            return titleContentSize
        }
    
        override func layoutSubviews() {
            titleLabel?.preferredMaxLayoutWidth = 300 // Or whatever your maximum is
            super.layoutSubviews()
        }
    }
    

    This won't cater for an image, however.

提交回复
热议问题