使用 NSLayoutConstraints 添加第二个子视图控制器,始终将其放置在导航栏下方,而不是导航栏之后
Posted
技术标签:
【中文标题】使用 NSLayoutConstraints 添加第二个子视图控制器,始终将其放置在导航栏下方,而不是导航栏之后【英文标题】:Adding a second child view controller using NSLayoutContraints, always position it under the Navigation bar, not after the Navigationbar 【发布时间】:2017-03-03 08:45:52 【问题描述】:我遇到了一个奇怪的 UI 问题。请在下面找到详细信息。
我创建了一个示例演示项目来展示该问题。要求非常简单(也附有屏幕截图)。该应用以一个 UINavigationController 的 ViewController 开头,因此它显示了一个 NavigationBar。 2 个元素的 UISegmentController 已添加到 UINavigationBar。 每个段选择都会显示 2 个子 TableViewController。 每个 ViewController 都是使用 NSLayoutConstraints 添加的。并且每次都会删除较大的子 VC,并添加新的子 VC,而不是隐藏和显示。虽然我们不是每次都创建 VC 对象。它有很强的参考价值 子 VC 被添加到 RootVC 的视图中,而不是具有 ContainerView。也尝试了 ContainerView,但结果相同。现在的问题是,第二个子 VC 总是放在导航栏下面(请参考随附的屏幕截图)。但是第一个非常好,因为它位于 NavigationBar 下方。如果我将 NavigationBar 半透明属性设置为“否”,则两者都可以正常工作。但是将 NavigationBar 半透明属性设置为“YES”,只有第一个会正确放置,第二个不会。哪个 ChildViewController(firstVC 或 secondVC)并不重要,它发生在第一个之后添加的 childVC。对这个奇怪的问题有什么见解吗?我已经创建了一个示例演示 project 如果你们想检查那里发生了什么..
提前谢谢..
【问题讨论】:
你为什么不在 rootVC 中添加一个 UIView 并将你的 viewcontrollers 视图添加到你的 UIView.. 我的意思是说使用容器视图 cocoacasts.com/… 嗨@karthikeyan,感谢您的回复。我也使用过 ContainerView 并在帖子中提到了相同的内容。但问题依然存在。我再说一遍,如果 NavigationBar 半透明属性设置为 NO,一切正常.. 它与容器视图一起工作正常。您需要自动禁用AdjustsScrollViewInsets github.com/karthisiva/TestChileVC 【参考方案1】:您是否禁用了该选项:Auto adjust scrolls inset
?它有问题,仅适用于视图控制器的第一个 Scrollview
【讨论】:
Yes!!!.. 这解决了问题.. 所以使用 ContainerView 并自动禁用AdjustsScrollViewInsets 工作正常.. 非常感谢..【参考方案2】:如果您想将滚动视图移动到导航栏下方,
请设置 viewControllers 属性 self.automaticallyAdjustsScrollViewInsets = false;
【讨论】:
以上是关于使用 NSLayoutConstraints 添加第二个子视图控制器,始终将其放置在导航栏下方,而不是导航栏之后的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 的标题视图上使用 NSLayoutConstraints
带有 NSLayoutConstraints 的 UIView 灵活高度
使用 NSLayoutConstraints 在 UITextView 中将 UILabel 居中