将子 UIView 锁定到 topLayoutGuide
Posted
技术标签:
【中文标题】将子 UIView 锁定到 topLayoutGuide【英文标题】:Lock sub UIView's to the topLayoutGuide 【发布时间】:2014-06-12 15:06:40 【问题描述】:我有一个延伸到UINavigationBar
下方的视图。此视图有一个子视图 (MrSubview),它应该位于导航栏下方。当我为UINavigationBar
设置动画时,控制器topLayoutGuide
将发生变化。在这种情况下,我希望 MrSubview 向上移动。
我的第一个想法是我需要将UIView
提供给topLayoutGuide
,以便它可以在自动布局中使用它,但我想视图不应该与控制器耦合。
我正在寻找最好的方法。
UITableView
和 UIScrollView
是如何做到这一点的?
【问题讨论】:
【参考方案1】:UIScrollView
(UITableView
是UIScrollView
的子类)使用contentInset
属性执行此操作。如果您的view
属性是UIScrollView
,UIViewController
可以自动为您处理此问题。
如果您的控制器的view
属性不是滚动视图,您几乎必须在viewWillLayoutSubviews
期间自己在UIViewController
中实现此功能。
【讨论】:
看来我必须切换到 UIScrollView。我可以轻松地在控制器的自动布局中使用 topLayoutGuide,但我可以在 UIScrollView 中使用它。你能想出比在 viewWillLayoutSubviews 中调整垂直空间约束更好的方法吗?我想只使用自动布局来做到这一点。 我只使用自动布局,方法是保留对顶部约束的引用并在viewWillLayoutSubviews
期间更新它们的 constant
值。
但这不仅仅使用自动布局。它还需要每个使用该视图的视图控制器中的代码。以上是关于将子 UIView 锁定到 topLayoutGuide的主要内容,如果未能解决你的问题,请参考以下文章