【问题标题】:Is there is a way to create constraint greater than or equal relation through code有没有办法通过代码创建大于或等于关系的约束
【发布时间】:2017-06-01 11:05:13
【问题描述】:

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

  1. 我创建了两个视图。
  2. 创建第二个视图的高度约束,将其作为 IBOutlet 拖到我的单元格中。
  3. When cell is selected change status of selected cell.

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
            }
        }
    }
}

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

这是我的限制:

所以,我的问题是:

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

【问题讨论】:

  • NSLayoutConstraint 有一个“relation”属性,可以设置为“greaterThanOrEqual”。
  • 是的,但根据文档它是只读的
  • OK,那你得在创建约束的时候设置一下:NSLayoutConstraint(..., relatedBy: greaterThanOrEqual, ...)

标签: ios swift autolayout nslayoutconstraint


【解决方案1】:

正如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。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    相关资源
    最近更新 更多