我有一个带有自定义 UIViewController(继承自它的父类(super class))的 UINavigationBar

在这个 Controller 中,我正在实例化另一个 UIViewController 并将它的 View 添加为我的 View 中的 subview ,如下所示:

// 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 中添加一个约束,强制它
    遵守它的superview的topLayoutGuide。再次,这将是
    在代码中(可能在 -didMoveToSuperView 方法中)。确保
    将此约束分配给 LocationPermissionsInfoView
    view.superview 否则你会得到关于 View 层次结构的错误。

  • 本质上,最后 2 个选项几乎用相同的约束做同样的事情,只是在添加此约束的时间/地点有所不同。如果您在整个应用程序中的多个位置使用 LocationPermissionsInfoView,最好使用最后一个选项。

    关于ios - 使从nib 加载的 View 尊重superview 的顶部布局指南(导航栏底部),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28174454/

    10-11 15:33
    查看更多