我希望这个会有所帮助,但我正在尝试围绕一个概念。我有一个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
的高度,但是可以找不到正确的代码。
答案 0 :(得分:1)
1-您需要将viewB的前导,尾随,顶部和底部连接到viewA,并将viewB的宽度设置为=主vc视图的宽度
2-应该将ViewB内部的所有约束从上到下正确挂钩
3-与其重复使用.isActive = true
,不如考虑将所有约束包装在NSLayoutConstraint.activate([<#ConstraintsHere#>])
4-可能是您当前使用的方法,UITableView
更合适
答案 1 :(得分:1)
如果高度限制已完成,则不必考虑viewA的contentSize。 您不需要使用ViewB,子视图添加到viewA,subview1的顶部equalTo到viewA的顶部,设置subview1的高度,subview1的底部equalTo到subview2的顶部,或偏移一些Height。等等。直到最后一个子视图,subview4的底部等于viewA的底部。您无需设置内容的高度即可获得合适的内容大小。