【问题标题】:Adding a second child view controller using NSLayoutContraints, always position it under the Navigation bar, not after the Navigationbar使用 NSLayoutConstraints 添加第二个子视图控制器,始终将其放置在导航栏下方,而不是导航栏之后
【发布时间】: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.. 我的意思是说使用容器视图
  • 嗨@karthikeyan,感谢您的回复。我也使用过 ContainerView 并在帖子中提到了相同的内容。但问题依然存在。我再说一遍,如果 NavigationBar 半透明属性设置为 NO,一切正常..
  • 它与容器视图一起工作正常。您需要自动禁用AdjustsScrollViewInsets

标签: ios objective-c uiviewcontroller nslayoutconstraint childviewcontroller


【解决方案1】:

您是否禁用了该选项:Auto adjust scrolls inset?它有问题,仅适用于视图控制器的第一个 Scrollview

【讨论】:

  • Yes!!!.. 这解决了问题.. 所以使用 ContainerView 并自动禁用AdjustsScrollViewInsets 工作正常.. 非常感谢..
【解决方案2】:

如果您想将滚动视图移动到导航栏下方,

请设置 viewControllers 属性 self.automaticallyAdjustsScrollViewInsets = false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多