首页 > 解决方案 > 高度约束,lessThanOrEqualToConstant,但如果可能会尝试实现常量

问题描述

我有两个视图,previewSection 和 settingsEditSection。我正在尝试布局这些视图以实现以下目标:

我的问题是,当我给 previewSection 一个高度时,lessThanOrEqualToConstant: 400它的实际高度为 0。

有什么办法让我说:“lessThanOrEqualToConstant,x 的高度,只要有空间,就有 x 的高度”?

我希望 settingsEditSection 的高度为 150 为第一优先级,然后在使其变大之前,尽可能将 previewSection 设置为 400,如果之后还有空间,那么 settingsEditSection 可以大于 150 来填充空间。

这是我编写的代码,对我来说最有意义:

let previewSection = PreviewSection()
view.addSubview(previewSection)
let settingsEditSection = SettingsEditSection()
view.addSubview(settingsEditSection)
// Preview section
previewSection.translatesAutoresizingMaskIntoConstraints = false
previewSection.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
previewSection.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
previewSection.topAnchor.constraint(equalTo: view.topAnchor, constant: topMargin).isActive = true
previewSection.heightAnchor.constraint(lessThanOrEqualToConstant: 400).isActive = true
previewSection.bottomAnchor.constraint(equalTo: settingsEditSection.topAnchor).isActive = true
// Settings & edit section
settingsEditSection.translatesAutoresizingMaskIntoConstraints = false
settingsEditSection.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
settingsEditSection.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
settingsEditSection.bottomAnchor.constraint(equalTo: upgradeButton.topAnchor).isActive = true
settingsEditSection.heightAnchor.constraint(greaterThanOrEqualToConstant: 150).isActive = true
settingsEditSection.topAnchor.constraint(equalTo: previewSection.bottomAnchor).isActive = true

现在,previewSection 的高度为 0,然后 settingsEditSection 的高度刚好跨越整个父视图。

对我来说,这个问题的背景是我正在构建这个配置文件页面,并布置配置文件和按钮以在 iPhone X 和 iPhone 5S 上看起来最好,这是最好的方法。

标签: swiftnslayoutconstraint

解决方案


您可以在此处使用约束优先级。后

previewSection.heightAnchor.constraint(lessThanOrEqualToConstant: 400).isActive = true

您可以再添加一个提供默认高度的约束,但优先级较低。像这样,

let previewSectionHeight = previewSection.heightAnchor.constraint(equalToConstant: 400)
previewSectionHeight.priority = .defaultHigh
previewSectionHeight.isActive = true

这将使 previewSection 的高度为 400,直到 settingsEditSection 将其向上推以使其变小。要使所有这些工作,您还需要为 previewSection 和 settingsEditSection 的容器视图提供恒定的高度。


推荐阅读