iPhone 6 和 iPhone 6 Plus 上页面视图控制器的奇怪行为

Strange behavior of Page View Controller on iPhone 6 and iPhone 6 Plus

我试图用三个页面实现页面视图控制器。我已经做到了,它在 3.5 英寸和 4 英寸显示屏的 iPhone 上运行良好,但在 4.7 英寸和 5.5 英寸显示屏上出现问题。

我发现隐藏 UIPageViewController 的标准页面控件是这个错误的原因:当页面控件被隐藏时,UIPageVC 的视图改变了他的高度(+ 页面控件视图的高度)。

我的页面内容视图控制器对背景图像视图有限制以适应所有尺寸。

这是第一页:

这是第二页:

这是第三页,好的,我们已经到了最后一页:

但看看当我们 return 到第二页时会发生什么(页面内容控制器的视图完全向左移动了几个像素):

滑动到第一页 - 同样的结果:

但是! 看看我们在第一页之后转到第二页时看到了什么!现在通过 x 在正确的位置查看页面内容控制器:

转到最后一页:

让我们回到第二页!神圣的****!视图再次被某些东西移动:

转到第一页,全部在'right'(BAD)位置:

从第一页返回第二页。一切都在正确的位置:

所以,我的问题是这个 UIPageViewController 是怎么回事?我以为我的约束被打破了,但我的日志中没有任何关于它的信息,在情节提要中没有与约束相关的错误。

当我使用两种方法时 "presentationCountForPageViewController:, presentationIndexForPageViewController:" 一切正常,但按钮上方出现一条白线,其高度等于页面控件视图的高度(因此,我需要通过擦除上面列出的两种方法来隐藏它)。

提前感谢您未来的建议!

我修好了!但不是以正确的方式,因为它是 iOS 方面的错误。

因此,当您尝试隐藏 UIPageViewController 的页面控制视图时,私有 'pageSpacing' 属性 由于意外原因在 iPhone 6 和 iPhone 6 Plus 上损坏.很难从视图中看到和理解它。在我的例子中,iPhone 6 InterPageSpacing 属性 减少了 4,iPhone 6 Plus - 减少了 6 个值。因此,如果您尝试为 iPhone 4 或 5 设置 pageSpacing 属性,您会在页面之间看到一条白线,但在 6 和 6 Plus 上,这条线消失并且第二个控制器的视图移动到剩下几个像素。

现在我只是在初始化 UIPageViewController 时为 UIPageViewControllerOptionInterPageSpacingKey 设置了不同的值:

- (id)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(NSDictionary *)options
{
    NSMutableDictionary *dictionary = [NSMutableDictionary new];
    NSNumber *pageSpacing =
    IS_IPHONE_4_OR_LESS
    ? @(0)
    : IS_IPHONE_5
    ? @(0)
    : IS_IPHONE_6
    ? @(4)
    : @(6);

    [dictionary setValue:pageSpacing forKey:UIPageViewControllerOptionInterPageSpacingKey];

    self = [super initWithTransitionStyle:style navigationOrientation:navigationOrientation options:dictionary];
    return self;
}

是的,修复是脏的,但我没有找到其他方法来修复它,尤其是因为它是 Apple 的错误。