【问题标题】:How to define maximum width constraint with Auto-Layout?如何使用自动布局定义最大宽度约束?
【发布时间】:2016-09-17 22:32:10
【问题描述】:

使用自动布局将UIImageView 添加到UITableViewCell

UIImageView 的宽度应该是UITableViewCell 宽度的 50%,但无论如何不能大于 50px。

这不起作用:

    NSLayoutConstraint.activate([
        cellImageView.topAnchor.constraint(equalTo: contentView.topAnchor),
        cellImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
        cellImageView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor),
        cellImageView.heightAnchor.constraint(equalTo: cellImageView.widthAnchor, multiplier: cellImage.size.height / cellImage.size.width),
        cellImageView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.5),
        cellImageView.widthAnchor.constraint(lessThanOrEqualToConstant: 50)
        ])

如何定义布局约束?

【问题讨论】:

    标签: swift autolayout nslayoutconstraint swift3


    【解决方案1】:

    这是一个布局库吗?我不熟悉您代码中的语法,但根据您的描述,听起来您想要的宽度限制是:

    • lessThanOrEqualToConstant: 50
    • equalTo: contentView.widthAnchor, multiplier: 0.5 的优先级低于 50pt 约束

    【讨论】:

    • 如果图像宽度应该是单元格宽度的 50% 或最大 50px,为什么会是 greaterThanOrEqualTo?语法是 Swift 3。
    • 啊,你的编辑刚刚扭转了这一点。我将编辑我的答案。关键部分是第二个约束的优先级较低。
    • 对不起,我的描述可能不够清楚,我的意思是最大 50% 或更小。更新了帖子:)
    • 没问题。如果设置较低的优先级可以解决问题,请告诉我。
    • 谢谢,它通过将 50% 约束设置为 999 来工作。
    【解决方案2】:

    您将设置两个具有不同优先级的单独约束。一个约束是具有UILayoutPriority.DefaultHigh 优先级的50% 宽度(例如750),而第二个约束是具有UILayoutPriority.Required 优先级的50 point 约束(例如1000)。然后,这将尝试满足这两个约束,但如果它们发生冲突(即超过 50 分),则会打破 50% 的约束。

    【讨论】:

    • 我很困惑,你在上面说了一些不同的话(“它通过将 50% 约束设置为 999 来工作”)。这个评论也有点令人困惑,因为这会推断出 50% 比 50pt 约束更强。这将使视图保持在 50%,因为这是最强的约束。
    • 对不起,这里是更正的评论:“这不起作用,因为当我为 50% 约束设置 UILayoutPriority.DefaultHigh 时,即使没有激活 50pt 约束,它也根本不会生效。解决方案是保留 50pt 约束的优先级(默认为 1000)并将 50% 的优先级设置为 999。”所以你的解决方案几乎奏效了:)
    • 啊,这更有意义。感谢您的澄清。是的,有时high 是不够的,考虑到其他 [有时更隐藏的] 主动约束(例如拥抱/伸展)。很高兴999 工作!
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2019-06-03
    • 2020-03-20
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多