UIPageViewController (SpineLocationMid) 的子视图有奇怪的帧

Posted

技术标签:

【中文标题】UIPageViewController (SpineLocationMid) 的子视图有奇怪的帧【英文标题】:Child views of UIPageViewController (SpineLocationMid) have strange frames 【发布时间】:2013-06-15 14:32:43 【问题描述】:

我有一个以编程方式实现 UIPageViewController 的 iPad 项目。当我将设备切换到横向模式时,我在它的委托方法中将 pageViewController 的脊椎位置更改为 Mid:

-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
if (UIInterfaceOrientationIsPortrait(orientation))
    ChildViewController *viewController = (ChildViewController *)[self pageControllerAtIndex:currentPageIndex];
    [pageViewController setViewControllers:@[viewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
    return UIPageViewControllerSpineLocationMin;
 else 
    ChildViewController *first = (ChildViewController *)[self pageControllerAtIndex:currentPageIndex];
    ChildViewController *second = (ChildViewController *)[self pageControllerAtIndex:currentPageIndex+1];
    [pageViewController setViewControllers:@[first,second] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
    return UIPageViewControllerSpineLocationMid;


然后我的 UIPageViewController 显示两个页面,在我开始分页之前它看起来很好。问题是:它的一个子视图控制器(在我开始翻转的一侧)占用了设备屏幕的所有空间,因此另一个页面隐藏在它下面。 在 childViewController 的课程中​​,我发现在 -(void)viewWillAppear 方法中,框架的宽度很好(我需要它是 512 - 我屏幕的一半),但在 -(void)viewDidAppear 方法中它已经是 1024。

【问题讨论】:

【参考方案1】:

检查ChildViewController.view 的自动调整掩码或布局约束,并确保其大小不受父视图大小的影响。

【讨论】:

【参考方案2】:

只需设置为我的 ChildViewController setWantsToFullScreenLayout:NO 即可解决问题。

【讨论】:

以上是关于UIPageViewController (SpineLocationMid) 的子视图有奇怪的帧的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController - 不符合协议

UIPageViewController 方向只向前

UIPageViewController 和 UIScrollView

NavigationController 中的 UIPageViewController

如何删除 UIPageViewController 中的 previousViewControllers

UIPageViewController -presentationCount 不触发