我目前有一个添加到父UIScrollView的UIView(我们将其称为viewB
),我们将其称为scrollView
。此功能按预期运行,并像这样添加了viewB
;
viewB.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
viewB.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
viewB.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
viewB.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
viewB
比scrollView
高,因此它可以垂直滚动。
在我的应用中的某个时刻,用户可以点击一个按钮,这会向viewB
添加更多内容,从而改变viewB
的高度。在该按钮的轻按上,scrollView
似乎不知道要更新其任何约束,并且viewB
最终会改变位置并且没有按预期出现。
我将调用哪些方法(以及在哪些视图上)以强制AutoLayout告诉scrollView
viewB
已更改大小?还是从viewB
中删除scrollView
并重新添加新约束会更有效?
答案 0 :(得分:1)
滚动视图内的视图内的子视图应随时从上到下正确挂钩,因此,当向视图B添加新的子视图时,需要将其正确插入该链内,然后调用
self.view.layoutIfNeeded()
如果在ex之前将其添加到底部,则应使用viewB移除大多数底部子视图的底部约束,并将其钩到新视图的顶部,然后将该新子视图的底部重新钩到viewB的底部,并给出height&width& x约束最终再次刷新了布局,这是一个繁琐的问题,因此您可以选择它或使用此技巧
提示:可以使用UITableView或使用具有轻松删除/添加/插入功能的UIStackView替换viewB,而不是使用UIScrollView手动管理约束