将子 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,以便它可以在自动布局中使用它,但我想视图不应该与控制器耦合。

我正在寻找最好的方法。

UITableViewUIScrollView 是如何做到这一点的?

【问题讨论】:

【参考方案1】:

UIScrollViewUITableViewUIScrollView 的子类)使用contentInset 属性执行此操作。如果您的view 属性是UIScrollViewUIViewController 可以自动为您处理此问题。

如果您的控制器的view 属性不是滚动视图,您几乎必须在viewWillLayoutSubviews 期间自己在UIViewController 中实现此功能。

【讨论】:

看来我必须切换到 UIScrollView。我可以轻松地在控制器的自动布局中使用 topLayoutGuide,但我可以在 UIScrollView 中使用它。你能想出比在 viewWillLayoutSubviews 中调整垂直空间约束更好的方法吗?我想只使用自动布局来做到这一点。 我只使用自动布局,方法是保留对顶部约束的引用并在 viewWillLayoutSubviews 期间更新它们的 constant 值。 但这不仅仅使用自动布局。它还需要每个使用该视图的视图控制器中的代码。

以上是关于将子 UIView 锁定到 topLayoutGuide的主要内容,如果未能解决你的问题,请参考以下文章

将子视图添加到 UIViews 数组?

在 CSS flexbox 布局中,如果父级可垂直滚动,是不是有办法将子块高度锁定到父级(滚动)高度?

如何将子层与 UIView 一起移动?

将子视图置于一切之上,但低于另一个 UIView

将子视图添加到 xib 文件

选择时将子视图添加到 UITableViewCell