有没有办法通过代码

时间:2017-06-01 11:05:13

标签: ios swift autolayout nslayoutconstraint

我正在开发可扩展的表格单元格,我的算法如下:

  1. 我创建了两个视图。
  2. 创建第二个视图的高度约束,将其作为IBOutlet拖动到我的单元格。
  3. 选择单元格时,更改所选单元格的状态。
  4. class ExpandableCell: UITableViewCell {
    
        @IBOutlet weak var expandableCellHeightConstraint: NSLayoutConstraint!
    
        @IBOutlet weak var expandableView: UIView!
    
        var isExpanded:Bool = false
        {
            didSet
            {
                if !isExpanded {
                    self.expandableCellHeightConstraint.constant = 0.0
    
                } else {
                    self.expandableCellHeightConstraint.constant = 120
                }
            }
        }
    }
    

    一切都很好,但我希望我的第二个视图调整大小与内部内容相关。

    以下是我的约束:

    enter image description here

    所以,我的问题是:

    将非严格值写入self.expandableCellHeightConstraint.constant的最佳方法是什么?实际上我想写self.expandableCellHeightConstraint.constant >= 120之类的东西,但据我所知,这是不可能的。

1 个答案:

答案 0 :(得分:4)

Martin R所示,您可以在以下代码中创建高度约束:

let heightConstraint = NSLayoutConstraint(
        item: yourExpandableView,
        attribute: .height,
        relatedBy: .greaterThanOrEqual,
        toItem: nil,
        attribute: .notAnAttribute,
        multiplier: 1.0,
        constant: 120
)

或者,你可以这样做:

let heightConstraint = yourExpandableView.heightAnchor.constraint(greaterThanOrEqualToConstant: 120)

然后,只要需要启用/禁用此约束,就可以将其isActive属性设置为true或false。您可能还希望将此约束作为类的属性,因为一旦属性isActive设置为false,约束就会变为nil。

我希望它有用!