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上的后退按钮触摸