自定义 UIViewController 内的 UIPageViewController

标签 uipageviewcontroller

我整个下午都被这个问题困扰了。 我做了一个自定义的 UIViewController。到目前为止,我在这个自定义 View Controller 中显示了自定义 View 。一切都很好。现在我想做的是在自定义 Controller 内显示一个 pageviewcontroller。没有错误,但是页面 Controller 的 View 显示在自定义 Controller 的边界之外(。

这是我的代码

- (void)viewDidLoad
{
[super viewDidLoad];
self.monthYearController = [[avvAgendaMonthViewController alloc] init];
self.yearViewController  = [[avvAgendaYearViewController alloc] init];
self.pager               = [[UIPageViewController alloc]   initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
  navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                            options:nil];

//Assign the delegate and datasource .
self.pager.delegate = self;
self.pager.dataSource = self;

//Set the initial view controllers.
NSArray *viewControllers = [NSArray arrayWithObject:self.yearViewController];
[self.pager setViewControllers:viewControllers
            direction:UIPageViewControllerNavigationDirectionForward
            animated:NO
            completion:nil];



//Add the pageViewController as the childViewController
[self addChildViewController:self.pager];
[self.view addSubview:self.pager.view];

[self.pager didMoveToParentViewController:self];
CGRect pageViewRect = self.view.bounds;
pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0);
self.pager.view.frame = pageViewRect;


//Assign the gestureRecognizers property of our pageViewController to our view's gestureRecognizers property.
self.view.gestureRecognizers = self.pager.gestureRecognizers;

这是界面(非常简单):

@interface CustomNavigatorViewController : UIViewController      <CustomNavigationDelegate,UIPageViewControllerDataSource,UIPageViewControllerDelegate>

@property (nonatomic,strong) CustomNavigation* navigation;
@property (nonatomic,strong) UIPageViewController *pager;
@property (nonatomic,strong) AgendaYearViewController* yearViewController;
@property (nonatomic,strong) AgendaMonthViewController* monthYearController;
@property (nonatomic,strong) UIViewController* agendaCurrentView;


@end

我尝试(按照第一个答案中的建议)在最后调用 didMoveToParentViewController:

CGRect pageViewRect = self.view.bounds;
pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0);
self.pager.view.frame = pageViewRect;
[self.pager didMoveToParentViewController:self];

但没有运气,如图所示: the custom view controller is underneath the calendar view. The calendar view should be inside the custom view controller and not outside

自定义 View Controller 位于日历 View 下方。日历 View 应该位于自定义 View Controller 内部而不是外部。 另外,怎样才能把书脊放在上面呢?

[已解决] 没关系:第一个答案是正确的。我的错误是框架设置错误。

最佳答案

我遇到了完全相同的问题。在调用 didMoveToParentViewController: 之前设置页面 View Controller 的框架应该可以解决它。

关于自定义 UIViewController 内的 UIPageViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17597051/

相关文章:

ios - 如何禁用 View Controller 的无限循环?

ios - 如何在首次启动时仅显示一次 UIPageViewController

ios - 通过预加载单元格提高 UITableView 性能

swift - xcode 7 beta 3 swift UIPageViewController subview 调整大小问题

ios - Swift PageViewController 渐变背景

objective-c - UIPageViewController 取消页面滑动

ios - 将触摸转发到 UIPageViewController

ios - 函数签名特化 <Arg[0] = Owned To Guaranteed>

ios - 如何在水平 UIPageViewController 中实现垂直 UIPageViewController

ios - 如何同步 UIView 移动与 UIPageViewController 的滑动手势