UIPageViewController 页面控件太靠近 iPhone X iOS 11 上的主页栏

Posted

技术标签:

【中文标题】UIPageViewController 页面控件太靠近 iPhone X iOS 11 上的主页栏【英文标题】:UIPageViewController page controls too close to home bar on iPhone X iOS 11 【发布时间】:2017-09-27 04:33:55 【问题描述】:

我有一个带有一个主视图控制器的程序,其中包括一个按钮,用户可以点击该按钮以通过UIPageViewController 显示 4 页“快速帮助”。这 4 个页面分别是 QuickHelpViewController0ID - QuickHelpViewController3ID,每个页面都是标准的UIViewController。当他们点击按钮时,我运行:

-(void)showQuickHelp

    // Load the quick help page view controller
    self.quickHelpPageVC = [self.storyboard instantiateViewControllerWithIdentifier:@"QuickHelpPageViewControllerID"];
    self.quickHelpPageVC.dataSource = self;

    // Create initial quick help page
    UIViewController *quickHelpVCA = [self quickHelpVCForPageIndex:0];
    NSArray <UIViewController *> *quickHelpVCs = @[quickHelpVCA];

    // And assign it to the page VC
    [self.quickHelpPageVC setViewControllers:quickHelpVCs direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    [self presentViewController:_quickHelpPageVC animated:YES completion:nil];
  // showQuickHelp:

我还提供了一个UIPageViewControllerDataSource,以便在用户滚动到下一页/上一页时根据需要创建 4 个页面中的每一个。

这在 ios 9.3 和 10.x 上运行良好。它也适用于除 iPhone X(模拟器)以外的所有设备的 11.0。在这一点上,4 个页面指示点的行在屏幕底部向下,仅比 iOS 11 提供的新“主页栏”高 1 或 2 个像素(向上滑动以切换应用等)。

我从 Apple 发现了一个名为 Building Apps for iPhone X 的视频,其中开发人员讨论了解决类似问题,但在这种情况下,他的解决方案是简单地更改自动布局以将子 UIPageControl 约束到底部的“安全区域”传统的底部布局指南。但我没有在另一个视图控制器上使用UIPageControl;我正在使用UIPageViewController,我看不到任何方法可以控制窗口底部的页面控件的位置。 (是的,我在 Interface Builder 中启用了“使用安全区域布局指南”选项。)

我无法想象 iOS 11 在我的场景中默认错误地调整了 UIPageViewController 的大小,我也看不到任何明显的修复方法。有什么建议吗?

【问题讨论】:

这绝对是一个错误。另一个是 UINavigationController 中的浮动工具栏。希望他们能尽快解决这些问题。 感谢您的回答。仅供参考,如果它是一个独立的答案而不是评论,我会接受它作为答案;我看不到接受评论作为答案的方法。再次感谢。 【参考方案1】:

11.2 中会对此进行修复

https://9to5mac.com/2017/10/30/ios-11-2-beta-1/

UIKit - 已解决的问题

在 iPhone X 上的 UIPageViewController 中显示页面控件不再与屏幕底部的主页指示器重叠。 (34478195)

【讨论】:

太棒了!感谢发布。 iOS 11.2-Beta2 中似乎仍然存在该问题,还是我遗漏了什么? 我可以确认 IOS 11.1.2 存在错误 - 在实际 iPhoneX 上进行了测试。将设备升级到 IOS 11.2.1 后问题得到解决,无需任何代码更改。【参考方案2】:

我遇到了同样的问题,但发现如果我取消选中主视图控制器上的“延伸边缘 - 底部栏下方”,点会向上移动并在模拟器上正确显示 iPhone X。不幸的是,它还会在所有其他设备上向上移动点...如果页面上没有太多内容,这可能不是问题,但对我来说,它会截断一页,上面有很多文字。

它看起来确实像一个错误,所以我会等待 Apple 希望解决这个问题,因为我不想让讨厌的 hack 以编程方式更改底部栏标志下的扩展边缘,仅适用于 iPhone X

【讨论】:

以上是关于UIPageViewController 页面控件太靠近 iPhone X iOS 11 上的主页栏的主要内容,如果未能解决你的问题,请参考以下文章

UIPageControl(页面控件)不显示在 UIPageViewController

UIPageViewController:每页更改页面指示器/页面控件的颜色

iOS UIPageViewController 页面控件不同步

UIPageViewController 页面控件太靠近 iPhone X iOS 11 上的主页栏

改变页面控件的位置

UIPageViewController