在 iOS 8 中将 ViewController 的 View 作为子视图添加到 UIPageViewController 会在显示/隐藏时产生奇怪的 UINavigationBar

Posted

技术标签:

【中文标题】在 iOS 8 中将 ViewController 的 View 作为子视图添加到 UIPageViewController 会在显示/隐藏时产生奇怪的 UINavigationBar【英文标题】:Adding ViewController's View as subview to UIPageViewController in iOS 8 gives weird UINavigationBar while show/hide 【发布时间】:2014-12-11 10:19:47 【问题描述】:

我一直在做一个项目,我需要将具有缩放/滑动功能的图像列表显示为呈现的视图模式。我使用ContainerView 创建了自定义ImageViewer,并在其中添加了UIPageViewController。根据需要,我在 UIPageViewcontroller's 视图上添加了 ImageViews。当用户点击imageView 时,顶部的UINavigation 会在切换的基础上显示和隐藏。

ios 7.1 及更低版本中一切正常。但是,当我在 iOS 8 设备和模拟器中测试该功能时,ImageViews 没有添加到 TopLeft 的 UIPageViewController 中(UINavigationBar 下方)。它添加在NavigationBar 下方,如下面的bug_iOS_8.png 所示。

一旦我触摸了有问题的视图,它就会重新定位到正确的位置,如下图的预期.png 所示。

我已经在示例项目中创建并测试了这个问题,它似乎是 iOS 8 本身的错误,带有UIPageViewController。我也遇到了几个关于UIPageViewController 奇怪行为的问题。请查看示例应用程序here,如果有人对正在发生的事情有任何提示,请告诉我。

感谢您的时间和帮助。

PS:顺便说一句,我正在使用以下版本的 Xcode。

更新 1:

我已经按照 pin 的建议进行了尝试。然而,对齐的问题在于 UIViewController 的主视图而不是它的子视图。在下图中,黄色是 UIViewController 的主视图,红色是添加的子视图,我在“红色”上添加了引脚,以参考超级视图“黄色”之一。请检查以下屏幕截图。

在启动时。

触摸屏幕后。

亲切的问候,

【问题讨论】:

嘿漂亮的截图.. 感谢@NarasimhaiahKolli 的反馈;) 在德国看截图有点不舒服 ;) 【参考方案1】:

检查特定 viewController 的情节提要并确保未选择 Extended Edges >> Under top bar。

【讨论】:

我希望选中顶部栏下方,因为我的视图将位于顶部栏的后面。当用户点击照片或视图时,顶部栏会隐藏和显示。在 iOS 7 中它运行良好,但在 iOS 8 中它有问题 :( 感谢您指出上述方向,但它似乎对我没有效果 :(【参考方案2】:

我有一个非常相似的问题,我修复它的方法是选择要添加到情节提要中的 UIPageViewController 的视图并选择 pin 选项。在图像下方,您可以看到“限制到边距”选项,请确保取消选择该选项。此外,在选择要固定它的视图时,请确保选择超级视图而不是顶部布局指南。

【讨论】:

感谢您提供一些提示。然而,对齐的问题在于 UIViewController 的主视图而不是它的子视图。请检查我根据您的回答更新的主要问题的“更新 1”,但问题仍然存在:( 黄色视图是否正确固定到 uipageviewcontroller? 是的,它已正确固定,但是我找到了问题的答案。我将在答案部分发布。感谢您的努力和建议。它真的帮助了我。【参考方案3】:

好奇你会这样隐藏你的导航控制器吗?

[self.navigationController setNavigationBarHidden:YES];

如果您有多个导航控制器,您可能需要检查您是否引用了正确的导航控制器。

如果您希望在呈现 ViewController 时将其隐藏,则应将其移至

    -(void) ViewWillAppear

【讨论】:

是的,我正在使用 [self.navigationController setNavigationBarHidden:YES animated:YES]; 隐藏和显示导航控制器;在选择器上。单击 imageView 时会调用选择器。单击 ImageView 时,使用 [self presentViewController:...] 从父视图呈现带有 NavigationController 的新 ViewController。

以上是关于在 iOS 8 中将 ViewController 的 View 作为子视图添加到 UIPageViewController 会在显示/隐藏时产生奇怪的 UINavigationBar的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3 中将 JSON 响应从 HTTP 请求传递到另一个 ViewController

iOS 8-viewController my_shouldAutorotate 在 presentViewController 时崩溃

ViewController 中的 UITableView 和 UICollectionView 在 iOS 8 中不起作用

ios 8.1:类型“ViewController”不符合协议“UICollectionViewDataSource”

在 iOS 8 Today Extension 中从 Storyboard 加载特定的 ViewController

防止我的 iOS 8 iPad 操作表关闭它的父 ViewController?