您好我正在搞乱一些代码并且决定我想在水平UIStackView中创建一个UILabel和UITextField的UITableViewCell,其最小高度为50并且自动调整大小。
我已使用以下代码在下面设置了tableView:
tableView.register(ExampleTableViewCell.self, forCellReuseIdentifier: "ExampleCellId")
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = UITableViewAutomaticDimension
出于某种原因,如果没有出现约束警告错误,我无法使其工作。以下是我的一次尝试。网上似乎没有关于如何做到这一点。我知道我可以在stackView中没有标签和textField,但这是我想要解决的问题,我认为这是可能的。
class ExampleTableViewCell: UITableViewCell {
private let nameLabel: UILabel = {
let label = UILabel()
label.setContentHuggingPriority(UILayoutPriority(rawValue: 251), for: .horizontal)
label.text = "Name"
return label
}()
private let nameTextField: UITextField = {
let tf = UITextField()
tf.placeholder = "Enter Name"
return tf
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupViews() {
let stackView = UIStackView(arrangedSubviews: [nameLabel, nameTextField])
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.spacing = 10
contentView.addSubview(stackView)
nameLabel.heightAnchor.constraint(greaterThanOrEqualToConstant: 50).isActive = true
stackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).isActive = true
stackView.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
}
}
这是我得到的错误 - 我知道这是由于高度限制,但我怎么能让这行高度至少为50点?
无法同时满足约束条件。 可能至少下列列表中的一个约束是您不想要的约束。 试试这个: (1)查看每个约束并试图找出你不期望的; (2)找到添加了不需要的约束或约束的代码并修复它。
<NSLayoutConstraint:0x604000483ca0 V:|-(0)-[UIStackView:0x7f9663c4c170] (active, names: '|':UITableViewCellContentView:0x7f9663f07500 )>,
<NSLayoutConstraint:0x6040004845b0 UIStackView:0x7f9663c4c170.bottom == UITableViewCellContentView:0x7f9663f07500.bottom (active)>,
<NSLayoutConstraint:0x604000486900 UILabel:0x7f9663c489b0'Name'.height >= 50 (active)>,
<NSLayoutConstraint:0x60000028db10 'UISV-canvas-connection' UIStackView:0x7f9663c4c170.top == UILabel:0x7f9663c489b0'Name'.top (active)>,
<NSLayoutConstraint:0x60000028db60 'UISV-canvas-connection' V:[UILabel:0x7f9663c489b0'Name']-(0)-| (active, names: '|':UIStackView:0x7f9663c4c170 )>",
<NSLayoutConstraint:0x60000028dd90 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7f9663f07500.height == 50 (active)>
将尝试通过违反约束来恢复 = 50(有效)&gt;
出于某种原因,我在设置时没有收到任何警告:
nameLabel.heightAnchor.constraint(greaterThanOrEqualToConstant: 100).isActive = true
nameTextField.heightAnchor.constraint(greaterThanOrEqualToConstant: 100).isActive = true