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

时间:2015-02-26 10:10:54

标签: ios objective-c uipageviewcontroller iphone-6 pagecontrol

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

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

我的页面内容视图控制器具有适合所有尺寸的背景图像视图的约束。

这是第一页: This is first page

这是第二页: This is second page

这是第三页,好的,我们已经到达了最后一页: This is third page

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

滑动到第一页 - 结果相同: This is again first page

但是!看看第一页后我们到第二页的内容!现在通过x查看页面内容控制器在正确的位置: This is second page

转到最后一页: This is the last page

让我们回到第二页!神圣的****!视图再被某个东西感动: This is the second page

转到第一页,全部在'右边' ( BAD )职位: This is the first page

从第一页返回第二页。一切都在好的和正确的位置: This is the second page

所以,我的问题是这个UIPageViewController发生了什么?我认为我的约束被破坏但我的日志中没有任何内容,在故事板中没有与约束相关的错误。

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

提前感谢您未来的建议!

1 个答案:

答案 0 :(得分:3)

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