Tha*_*nos 3 interface-builder uinavigationbar ios autolayout swift
我有一个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
Run Code Online (Sandbox Code Playgroud)
它LocationPermissionsInfoView是在 IB 中设计的,具有各种自动布局约束。但是,我希望该视图中存在的“contentView”遵守作为子视图添加的视图的顶部布局指南(准确地说是自定义导航栏的底部)。现在,IB 显然只允许我设置与界面中的顶级视图相关的约束。
关于如何实现这一目标有什么想法吗?理想情况下来自 IB 或LocationPermissionsInfoView控制器中的某个位置。
尝试以下方法之一:
self.edgesForExtendedLayout = UIRectEdgeNone;在视图控制器的 -viewDidLoad 方法中使用
。这会将 origin.y 转换到导航栏的底部。
在视图控制器中添加一个约束,使 LocationPermissionsInfoView 的视图尊重其 topLayoutGuide。由于您是以编程方式添加视图,因此也需要以编程方式添加约束。
在 LocationPermissionsInfoView 中添加一个约束,强制其遵守其超级视图的 topLayoutGuide。同样,这将在代码中(可能在-didMoveToSuperView方法中)。确保将此约束分配给 LocationPermissionsInfoView 的 view.superview,否则您将收到有关视图层次结构的错误。
本质上,最后两个选项几乎用相同的约束做同样的事情,只是在添加此约束的时间/位置上有所不同。如果您在应用程序的多个位置使用 LocationPermissionsInfoView,那么最好使用最后一个选项。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2950 次  |  
        
|   最近记录:  |