UINavigationController 上的 UIPageViewController 在更改方向后不会重新布局其子视图控制器

Posted

技术标签:

【中文标题】UINavigationController 上的 UIPageViewController 在更改方向后不会重新布局其子视图控制器【英文标题】:UIPageViewController on UINavigationController does not relayout its child viewcontroller since changing orientation 【发布时间】:2013-11-03 17:07:23 【问题描述】:

我正在制作以下视图控制器(VC)结构。

[UINavigationViewController] -> [UIPageViewController] -> [UIViewControllers]

那么,这个 VC 应该支持纵向和横向。

我遇到的一个问题是在将方向更改为任何一侧时提出的。

你可以看到问题。

红色区域是UIPageViewController上子VC的背景色。蓝色区域是背景色UIPageViewController。

我猜子 VC 没有被 UIPageViewController 重新布局。我已经想通了很长时间。我终于找到了一种解决方法,将以下覆盖函数添加到 custom UIPageViewController。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

    [self setViewControllers:self.viewControllers
                   direction:UIPageViewControllerNavigationDirectionForward
                    animated:NO
                  completion:NULL];

虽然在完成旋转后立即显示向下移动视图。这段代码大致解决了这个问题。

无论如何,我真的很想知道任何好的和自然的解决方案。

更新 我的应用在 ios6 上运行良好。可能是iOS7的错误?

【问题讨论】:

你为不同的方向制作了 2 个不同的 xib? 当我在父视图控制器之外使用页面视图控制器时遇到了布局问题(正如你正在做的那样)。当我将页面视图控制器添加到父视图控制器时,这些问题就消失了。我使用了 Apple 的 Page-Based Application Xcode 模板中的样板代码。 @MirkoCatalano 没有。自定义 UIPageViewController 是通过编程方式创建的,但 UINavigationController 是应用程序的 rootViewController。我使用故事板来构建 UI。我没有为 UIPageViewController 使用情节提要的原因是为了与自定义 UITableViewCell 上的按钮进行交互。我没有使用情节提要来制作按钮,因为按钮是在运行时动态创建的。 你的问题是栏的 20px 当UIViewController呈现UIPageViewController时,效果很好。但是,当 UIPageViewController 被推送到 UINavigationController 时,它的工作有点奇怪。 【参考方案1】:

我已经解决了这个问题,将以下 SINGLE 行代码放在自定义 UIPageViewController 的 [viewDidLoaded] 中。

self.automaticallyAdjustsScrollViewInsets = NO;

我认为 UIPageViewController 有一个滚动视图,如果它嵌入到 UINavigationController 中,它会在改变方向后布局不正确。

幸运的是,我的解决方案适合这个问题。

@MirkoCatalano 感谢您的 cmets。这些对于找到正确的解决方案非常有帮助。

【讨论】:

谢谢。你救了我。我被困在这个问题上三天了。我希望我能给你更多的支持。 @Greeso 这是我的荣幸。在您花费的时间里,我也遇到了这个问题。和你一样,我真的很开心。

以上是关于UINavigationController 上的 UIPageViewController 在更改方向后不会重新布局其子视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 UINavigationController 更改 pushViewController 上的后退按钮:

如何检测 UINavigationController 工具栏背景上的触摸

UINavigationController上的swift菜单项在打开segue时消失[关闭]

检测UINavigationController上的后退按钮触摸

如何在 iOS 7 上的 UINavigationController 中禁用向后滑动手势

应用程序唤醒后 UINavigationController 堆栈上的 UIViewController 重复