表格视图单元格中的UIButton Autolayout无效

时间:2018-02-06 09:53:05

标签: ios autolayout ios-autolayout nsautolayout adaptive-layout

我已将UIButton添加到具有自动布局的表格视图单元格但UIButton高度约束无法正常工作(已设置> =)

enter image description here

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

enter image description here

下面是细胞的xib设计,

enter image description here

1 个答案:

答案 0 :(得分:1)

您必须实现自己的UIButton子类,以提供您想要的内容。您可以使用以下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
    }
}

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

enter image description here

但请记住,要使按钮适应,必须允许单元格定义自己的大小,因此您必须在tableView上使用以下内容:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44 // or your better estimation