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
我已使用自动布局将 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