1

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

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

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

这是第一页: 这是第一页

这是第二页: 这是第二页

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

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

滑动到第一页 - 结果相同: 这又是第一页

但!看看我们在第一页之后进入第二页时的内容!现在通过 x 在正确位置查看页面内容控制器: 这是第二页

转到最后一页: 这是最后一页

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

转到第一页,全部位于“正确”(BAD)位置: 这是第一页

从第一页回到第二页。一切都在好的和正确的位置: 这是第二页

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

当我使用两种方法“presentationCountForPageViewController:,presentationIndexForPageViewController:”时,一切都很好,但在按钮上方出现一条高度等于页面控制视图高度的白线(因此,我需要通过删除上面列出的两种方法来隐藏它)。

提前感谢您对未来的建议!

4

1 回答 1

2

我修好了它!但不是正确的方式,因为它是 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 的错误。

于 2015-02-26T13:02:30.537 回答