UIView高度更改时更新自动布局约束

时间:2019-05-26 18:25:12

标签: ios swift uiscrollview autolayout

我目前有一个添加到父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

viewBscrollView高,因此它可以垂直滚动。

在我的应用中的某个时刻,用户可以点击一个按钮,这会向viewB添加更多内容,从而改变viewB的高度。在该按钮的轻按上,scrollView似乎不知道要更新其任何约束,并且viewB最终会改变位置并且没有按预期出现。

我将调用哪些方法(以及在哪些视图上)以强制AutoLayout告诉scrollView viewB已更改大小?还是从viewB中删除scrollView并重新添加新约束会更有效?

1 个答案:

答案 0 :(得分:1)

滚动视图内的视图内的子视图应随时从上到下正确挂钩,因此,当向视图B添加新的子视图时,需要将其正确插入该链内,然后调用

self.view.layoutIfNeeded()

如果在ex之前将其添加到底部,则应使用viewB移除大多数底部子视图的底部约束,并将其钩到新视图的顶部,然后将该新子视图的底部重新钩到viewB的底部,并给出height&width& x约束最终再次刷新了布局,这是一个繁琐的问题,因此您可以选择它或使用此技巧

  

提示:可以使用UITableView或使用具有轻松删除/添加/插入功能的UIStackView替换viewB,而不是使用UIScrollView手动管理约束