首页 > 解决方案 > 了解使用 AutoLayout/UIScrollView 设置约束时的 UIView 高度

问题描述

我希望这这个图形会有所帮助,但我正试图围绕一个概念展开思考。我有一个 UIScrollView,添加到我的 ViewController 中的 self.view,其顶部、前导、尾随和底部边缘固定到 self.view 的边缘。这是viewA.

我有第二个 UIView,viewB有几个子视图。这些子视图中的每一个都viewB使用 AutoLayout 添加,并且为简洁起见,这些子视图中的每一个都有一个高度约束设置为一个值。

我想添加viewBviewAviewA能够垂直滚动。由于viewB无疑高于viewA,它应该滚动。

我是viewB这样添加的;

viewB.topAnchor.constraint(equalTo: viewA.topAnchor).isActive = true
viewB.leadingAnchor.constraint(equalTo: viewA.leadingAnchor).isActive = true
viewB.trailingAnchor.cosntraint(equalTo: viewA.trailingAnchor).isActive = true

这就是我卡住的地方。如果我设置底部锚点 ( viewB.bottomAnchor.constraint(equalTo: viewA.bottomAnchor).isActive = true),我的 UIScrollView 不会滚动,并且viewB明显被切断。

viewB如果我为(使用)设置一个随机高度viewB.heightAnchor.constraint(equalToConstant: 2000.0).isActive = true,UIScrollView 会滚动,尽管这个常数太高了。

我很困惑如何获得合适的高度viewB。由于viewB确实有一个实际高度(带有硬编码的子视图),我认为 AutoLayout 没有理由不能计算 的高度viewB,即使没有设置底部锚点,但无法找出正确的代码。

标签: iosswiftuiscrollviewautolayout

解决方案


1-您需要将 viewB 前导、尾随、顶部和底部挂钩到 viewA ,加上 viewB 的宽度设置 = 主 vc 视图的宽度

2- viewB 内的所有约束都应该从上到下正确挂钩

3-而不是重复使用.isActive = true考虑将所有约束包装在里面NSLayoutConstraint.activate([<#ConstraintsHere#>])

4-可能适合您当前的方法aUITableView更适合


推荐阅读