我有一个带有自定义 UINavigationBar
的 UIViewController
(继承自它的父类(super class))。
在这个 Controller 中,我正在实例化另一个 UIViewController
并将它的 View 作为 subview 添加到我的 View 中,如下所示:
// I believe this should be 'as LocationPermissionsInfoViewController' but it crashed badly that way. Any ideas?
var permissionsView = UIViewController(nibName:"LocationPermissionsInfoView", bundle: nil) as UIViewController
self.view.addSubview(permissionsView.view)
permissionsView.view.frame = self.view.bounds
LocationPermissionsInfoView
是在 IB 中设计的,具有各种自动布局约束。但是,我想要一个存在于该 View 中的“contentView”,以尊重它作为 subview 添加的 View 的顶部布局指南(准确地说是自定义导航栏的底部)。现在,IB 显然只允许我在界面中设置与顶级 View 相关的约束。
关于如何实现此目标的任何想法?理想情况下来自 IB 或 LocationPermissionsInfoView
Controller 中的某处。
最佳答案
尝试以下操作之一:
在您的 View 中使用
self.edgesForExtendedLayout = UIRectEdgeNone;
Controller 的 -viewDidLoad 方法。这会将 origin.y 翻译成 导航栏的底部。在你的 View Controller 中添加一个约束,使 LocationPermissionsInfoView 的 View 尊重它的 topLayoutGuide。 由于您是以编程方式添加 View ,因此约束 也需要以编程方式添加。
在 LocationPermissionsInfoView 中添加一个约束,强制它 遵守它的 super View 的 topLayoutGuide。同样,这将是 在代码中(可能在
-didMoveToSuperView
方法中)。确保 将此约束分配给 LocationPermissionsInfoView 的 view.superview 否则你会得到关于 View 层次结构的错误。
从本质上讲,最后两个选项使用相同的约束条件执行相同的操作,只是在添加此约束条件的时间/位置不同。如果您在整个应用程序的多个位置使用 LocationPermissionsInfoView,最好使用最后一个选项。
关于ios - 使从 nib 加载的 View 尊重 superview 的顶部布局指南(导航栏底部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28174454/