自动TableViewCell以编程方式调整UIStackView中的标签和文本字段

时间:2017-10-26 23:39:55

标签: ios swift

您好我正在搞乱一些代码并且决定我想在水平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

0 个答案:

没有答案