我有UIViewController
个自定义UINavigationBar
(继承自它的超类)。
在这个控制器中,我正在实例化另一个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
控制器中的某个地方。
答案 0 :(得分:4)
请尝试以下方法之一:
在视图中使用self.edgesForExtendedLayout = UIRectEdgeNone;
controller的-viewDidLoad方法。这会将origin.y转换为
导航栏的底部。
在视图控制器中添加一个约束 LocationPermissionsInfoView的观点是尊重它的topLayoutGuide。 由于您以编程方式添加视图,因此约束 还需要以编程方式添加。
在LocationPermissionsInfoView中添加一个强制它的约束
遵守它的超级视图的topLayout指南。再次,这将是
在代码中(可能在-didMoveToSuperView
方法中)。确保
将此约束分配给LocationPermissionsInfoView
view.superview否则您将收到有关视图层次结构的错误。
基本上,最后两个选项几乎使用相同的约束执行相同的操作,并且仅在添加此约束的时间/位置不同。如果您在应用程序中的多个位置使用LocationPermissionsInfoView,最好使用最后一个选项。
答案 1 :(得分:0)
您是否尝试在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