我尝试用三页实现页面视图控制器。我已经做到了,它在配备3.5英寸和4英寸显示屏的iPhone上运行良好,但4.7英寸和5.5英寸显示屏出现了问题。
我发现隐藏UIPageViewController的标准页面控件是导致此错误的原因:当页面控件被隐藏时,UIPageVC的视图会改变其高度(+页面控制视图的高度)。
我的页面内容视图控制器具有适合所有尺寸的背景图像视图的约束。
这是第一页:
这是第二页:
这是第三页,好的,我们已经到达了最后一页:
但是看看当我们返回第二页时会发生什么(页面内容控制器的视图完全向左移动几个像素):
滑动到第一页 - 结果相同:
但是!看看第一页后我们到第二页的内容!现在通过x查看页面内容控制器在正确的位置:
转到最后一页:
让我们回到第二页!神圣的****!视图再被某个东西感动:
转到第一页,全部在'右边' ( BAD )职位:
从第一页返回第二页。一切都在好的和正确的位置:
所以,我的问题是这个UIPageViewController发生了什么?我认为我的约束被破坏但我的日志中没有任何内容,在故事板中没有与约束相关的错误。
当我使用两种方法" presentationCountForPageViewController:,presentationIndexForPageViewController:"一切都很好,但在按钮上方会出现一条高度等于页面控制视图高度的白线(所以,我需要通过删除上面列出的两种方法来隐藏它)。
提前感谢您未来的建议!
答案 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的错误。