table 视图单元格中 UIButton 的自动布局无法正常工作

Autolayout for UIButton in table view cell not working

我已使用自动布局将 UIButton 添加到我的 table 视图单元格,但 UIButton 高度限制不起作用(已设置 >=)

下面是我的自动布局约束设置,

下面是cell的xib设计,

您必须实现自己的 UIButton subclass 来提供您想要的内容。您可以使用以下 TitleAdaptingButton 实现,它会覆盖 intrinsicContentSize 以适应标题标签中的文本,即使在垂直轴上也是如此:

class TitleAdaptingButton: UIButton {

    override var bounds: CGRect {
        didSet {
            if !oldValue.equalTo(bounds) {
                invalidateIntrinsicContentSize()
            }
        }
    }

    override var intrinsicContentSize: CGSize {
        get {
            let labelSize = titleLabel!.sizeThatFits(CGSize(width: frame.width - (titleEdgeInsets.left + titleEdgeInsets.right), height: .greatestFiniteMagnitude))
            let desiredButtonSize = CGSize(width: labelSize.width + contentEdgeInsets.left + contentEdgeInsets.right, height: labelSize.height + contentEdgeInsets.top + contentEdgeInsets.bottom)
            return desiredButtonSize
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        self.titleLabel?.numberOfLines = 0
        // if you want the text centered
        //        self.titleLabel?.textAlignment = .center
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.titleLabel?.numberOfLines = 0
        // if you want the text centered
        //        self.titleLabel?.textAlignment = .center
    }
}

将此 class 添加到您的项目后,只需将其设置为每个按钮的自定义 class:

但请记住,为了适应按钮,必须允许单元格定义自己的大小,因此您必须在 tableView:

上使用以下内容
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44 // or your better estimation