使用 AutoLayout/UIScrollView 设置约束时了解 UIView 高度
Understanding UIView Height When Constraints Are Set with AutoLayout/UIScrollView
我希望这 能有所帮助,但我正在努力思考一个概念。我有一个 UIScrollView,添加到我的 ViewController 中的 self.view,其顶部、前导、尾随和底部边缘固定到 self.view 的边缘。这是 viewA
.
我有第二个 UIView,viewB
,有几个子视图。这些子视图中的每一个都使用 AutoLayout 添加到 viewB
,为了简洁起见,每个子视图都有一个高度约束设置为一个值。
我想将 viewB
添加到 viewA
,viewA
可以垂直滚动。由于 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
的高度,即使没有设置底部锚点,但可以'找出正确的代码。
1- 您需要将 viewB 的前导、尾随、顶部和底部挂接到 viewA ,加上 viewB 的宽度设置 = main vc 视图的宽度
2- viewB 中的所有约束都应该从上到下正确挂钩
3- 而不是重复使用 .isActive = true
考虑将所有约束包装在 NSLayoutConstraint.activate([<#ConstraintsHere#>])
中
4- 可能对于您当前的方法 UITableView
更合适
如果高度约束完成,就不用考虑viewA的contentSize了。
你不需要使用ViewB,子视图添加到viewA,subview1的顶部等于viewA的顶部,设置subview1的高度,subview1的底部等于subview2的顶部或偏移一些高度。等等。直到最后一个subview,subview4的bottom等于viewA的bottom。无需设置内容高度,即可获得合适的内容大小。
我希望这 viewA
.
我有第二个 UIView,viewB
,有几个子视图。这些子视图中的每一个都使用 AutoLayout 添加到 viewB
,为了简洁起见,每个子视图都有一个高度约束设置为一个值。
我想将 viewB
添加到 viewA
,viewA
可以垂直滚动。由于 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
的高度,即使没有设置底部锚点,但可以'找出正确的代码。
1- 您需要将 viewB 的前导、尾随、顶部和底部挂接到 viewA ,加上 viewB 的宽度设置 = main vc 视图的宽度
2- viewB 中的所有约束都应该从上到下正确挂钩
3- 而不是重复使用 .isActive = true
考虑将所有约束包装在 NSLayoutConstraint.activate([<#ConstraintsHere#>])
4- 可能对于您当前的方法 UITableView
更合适
如果高度约束完成,就不用考虑viewA的contentSize了。 你不需要使用ViewB,子视图添加到viewA,subview1的顶部等于viewA的顶部,设置subview1的高度,subview1的底部等于subview2的顶部或偏移一些高度。等等。直到最后一个subview,subview4的bottom等于viewA的bottom。无需设置内容高度,即可获得合适的内容大小。