【发布时间】:2019-09-07 05:31:58
【问题描述】:
我有两个视图,previewSection 和 settingsEditSection。我正在尝试布局这些视图以实现以下目标:
- previewSection 的顶部锚定到父视图的顶部
- 如果可能,previewSection 的高度为 400,但如果需要 settingsEditSection 以达到其最小高度,它会更小
- settingsEditSection 的顶部锚定到 previewSection 的底部
- settingsEditSection 的底部锚定到父视图的底部
- settingsEditSection 的高度至少 150
我的问题是,当我给 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 的高度刚好跨越整个父视图。
对我来说,这个问题的背景是我正在构建 this profile page,并布置配置文件和按钮以在 iPhone X 和 iPhone 5S 上看起来最好,这是最好的方法。
【问题讨论】:
-
容器视图的高度是多少?
-
@ShreeramBhat,这取决于设备。但它是设备的全宽,可能比设备的高度小约 100 像素
-
没关系。最主要的是容器视图高度它本身不应该依赖于子视图的高度,以上的东西可以工作。你可以试试我下面贴的代码。