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 的错误。
我试图用三个页面实现页面视图控制器。我已经做到了,它在 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 的错误。