[英]Make view loaded from nib respect superview's top layout guide (Navigation Bar Bottom)
我有一个带有自定义UINavigationBar
的UIViewController
(继承自它的超类)。
在这个控制器中,我实例化另一个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.