将UIPageViewController添加到子视图中,子视图仅显示pageContentview的边缘 [英] Adding a UIPageViewController to a subview, subview only shows edge of pageContentview

查看:104
本文介绍了将UIPageViewController添加到子视图中,子视图仅显示pageContentview的边缘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在rootViewController的SubView中显示整个pageContentView.我可以看到pageView,但是它不能正确自动调整大小以适合SubView,它只显示pageContentView的切除部分

I'm trying to display an entire pageContentView within a SubView on a rootViewController. I'm able to see the pageView but it doesn't auto-resize correctly to fit the SubView, it only shows a cutoff portion of the pageContentView

这是它的样子

这就是它的样子

我不知道如何调整pageView的大小,以便它可以正确显示在subView中.

I can't figure out how to resize the pageView so it display correctly in a subView.

RootViewController.h

RootViewController.h

#import <UIKit/UIKit.h>
#import "PageContentViewController.h"
@class PageContentViewController;

@interface CLDViewController : UIViewController <UIPageViewControllerDataSource>

@property (weak, nonatomic) IBOutlet UIView *subViewRoot;
- (IBAction)startWalkthrough:(id)sender;
@property (strong, nonatomic) UIPageViewController *pageViewController;
@property (strong, nonatomic) NSArray *pageTitles;
@property (strong, nonatomic) NSArray *pageImages;

@property (strong,nonatomic) PageContentViewController *bounds;
@end

ViewDidLoad和RootController中UIPageViewController的必需方法

ViewDidLoad and required methods for UIPageViewController in RootController

   - (void)viewDidLoad
 {

    [super viewDidLoad];

    _pageTitles = @[@"Over 200 Tips and Tricks", @"Discover Hidden Features", @"Bookmark Favorite Tip", @"Free Regular Update"];
    _pageImages = @[@"page1.png", @"page2.png", @"page3.png", @"page4.png"];

    // Create page view controller
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
    self.pageViewController.dataSource = self;

    PageContentViewController *startingViewController = [self viewControllerAtIndex:0];
    NSArray *viewControllers = @[startingViewController];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    //Trying to setup the pageViewContoller view to be inside the subview (subViewRoot)
    self.pageViewController.view.frame = self.subViewRoot.bounds;
    [self addChildViewController:_pageViewController];
    [self.subViewRoot addSubview:_pageViewController.view];
    [self.pageViewController didMoveToParentViewController:self];


}


    - (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index
{
    if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) {
        return nil;
    }

    // Create a new view controller and pass suitable data.
    PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
    pageContentViewController.imageFile = self.pageImages[index];
    pageContentViewController.titleText = self.pageTitles[index];
    pageContentViewController.pageIndex = index;

    return pageContentViewController;
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Page View Controller Data Source



- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }

    index--;
    return [self viewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

    if (index == NSNotFound) {
        return nil;
    }

    index++;
    if (index == [self.pageTitles count]) {
        return nil;
    }
    return [self viewControllerAtIndex:index];
}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    return [self.pageTitles count];
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
    return 0;
}

PageContentViewController.m

PageContentViewController.m

-viewDidLoad

-viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.backgroundImageView.image = [UIImage imageNamed:self.imageFile];
    self.titleLabl.text = self.titleText;

}

以前有人遇到过这种情况吗?你做了什么?

Has anyone ran into this situation before? What did you do?

感谢您的帮助!

推荐答案

由于将UIPageViewController的框架设置为该子视图"占位符视图的框架,因此需要确保该占位符的框架加载视图时将是准确的.从xibs加载的ViewController通常没有有用的框架,直到将它们的视图添加到某处为止,并且其子视图也是如此. viewWillAppear通常是最快的一次,您可以确保正确设置viewController的视图.

Since you are setting the frame of your UIPageViewController to the frame of that 'subview' placeholder view, you need to make sure that the frame for the placeholder will be accurate by when the view is loaded. ViewControllers loaded from xibs don't generally have a useful frame until their view is added somewhere, and the same goes for their subviews. viewWillAppear is usually the soonest you can be sure your viewController's view to be set correctly.

可以禁用自动布局,但是一旦您学会了如何使用自动布局,它就会成为一个不错的功能.在这种情况下,您可以将约束从subViewRoot添加到其父视图-前导,尾随,顶部和底部.从subViewRoot拖动到父级控件是一个简单的快捷方式.

Disabling auto-layout will work, but auto layout can be a nice feature once you learn how to use it. In this case, you can add constraints from subViewRoot to its parent view - Leading, Trailing, Top and Bottom. Control dragging from the subViewRoot to the parent is an easy shortcut.

这篇关于将UIPageViewController添加到子视图中,子视图仅显示pageContentview的边缘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆