繁体   English   中英

从nib尊重superview的顶部布局指南(导航栏底部)加载视图

[英]Make view loaded from nib respect superview's top layout guide (Navigation Bar Bottom)

我有一个带有自定义UINavigationBarUIViewController (继承自它的超类)。

在这个控制器中,我实例化另一个UIViewController ,并在我的视图中将它的视图添加为子视图,如下所示:

// 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中设计,具有各种自动布局约束。 但是,我希望该视图中存在一个“contentView”,以便将其作为子视图添加的视图视为顶级布局指南(准确地说是自定义导航栏的底部)。 现在,IB显然只允许我设置与界面中顶级视图相关的约束。

有关如何实现这一目标的任何想法? 理想情况下来自IB或LocationPermissionsInfoView控制器中的某个LocationPermissionsInfoView

请尝试以下方法之一:

  • 使用self.edgesForExtendedLayout = UIRectEdgeNone; 在你看来
    controller的-viewDidLoad方法。 这会将origin.y转换为导航栏的底部。

  • 在视图控制器中添加一个约束,使LocationPermissionsInfoView的视图尊重它的topLayoutGuide。 由于您以编程方式添加视图,因此还需要以编程方式添加约束。

  • 在LocationPermissionsInfoView中添加一个约束,强制它遵守它的superview的topLayoutGuide。 同样,这将在代码中(可能在-didMoveToSuperView方法中)。 确保将此约束分配给LocationPermissionsInfoView的view.superview,否则您将收到有关视图层次结构的错误。

从本质上讲,最后两个选项几乎使用相同的约束执行相同的操作,并且仅在添加此约束的时间/位置不同。 如果您通过应用程序在多个位置使用LocationPermissionsInfoView,最好使用最后一个选项。

您是否尝试在IB中添加另一个顶级UIView? 这样,所有XIB约束都与该视图相关。 因此,当您将该子视图添加到主VC并设置边界时,它应该尊重您的约束。

var permissionsView : LocationPermissionsInfoView = UIViewController(nibName:"LocationPermissionsInfoView", bundle: nil) as UIViewController

self.view.addSubview(permissionsView.viewMainContent)
permissionsView.viewMainContent.frame = self.view.bounds

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM