【发布时间】:2019-10-12 10:50:31
【问题描述】:
我目前有一个 UIView(我们称之为 viewB)添加到父 UIScrollView,我们称之为 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 已更改大小?还是从scrollView 中删除viewB 然后重新添加新的约束会更有效?
【问题讨论】:
-
滚动视图会自行处理内容大小的变化,所以我不会专注于此。 IMO,自定义视图应负责其大小。您是在自定义视图中添加额外的子视图还是扩展现有的子视图?
-
在定义其高度的更新之前和之后,您对 viewB 有哪些限制?
-
viewB有许多子视图,每个子视图都有一个定义的高度常数(其中最低的也固定到viewB的底部锚点)。所有这些功能正常,直到我改变viewB,通过在其最低子视图的底部添加一个新的子视图,更新bottomAnchor约束,并在其父级中调用self.view.layoutIfNeeded(),此时它的位置完全改变(它似乎正在失去它的 topAnchor)。
标签: ios swift uiscrollview autolayout