2014-09-06 4 views
4

Я пытаюсь отобразить весь pageContentView в SubView на rootViewController. Я могу видеть просмотра страницы, но это не автоматическое изменение размера правильно, чтобы соответствовать подвид, он показывает только отсечка часть pageContentViewДобавление UIPageViewController в subview, subview показывает только край страницыContentview

Вот как это выглядит

Вот что он должен выглядеть

Я не могу понять, как изменить размер просмотра страницы, так что корректно отображаются в подвид.

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 и необходимые методы UIPageViewController в 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

-viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

} 

Кто-нибудь сталкивался с этой ситуацией раньше? Что ты сделал?

Спасибо за помощь!

+0

Вы используете автозапуск или стойки + пружины? Можете ли вы опубликовать изображение «PageViewController» в раскадровке? – Acey

+0

Похоже, что выключение автоматической компоновки сделало трюк. Большое спасибо. Что на самом деле происходит, хотя я не уверен, что понимаю. – Cdub2235

+0

Добавил это как ответ ниже с некоторым объяснением. – Acey

ответ

0

Поскольку вы устанавливаете фрейм своего UIPageViewController в рамку этого представления подзаголовка, вам необходимо убедиться, что кадр для заполнителя будет точным, когда будет загружен вид. ViewControllers, загруженные из xibs, обычно не имеют полезного кадра до тех пор, пока их представление не будет добавлено где-то, и то же самое касается их подзонов. viewWillAppear, как правило, вы можете быть уверены, что ваш viewController будет настроен правильно.

Отключение автоматической компоновки будет работать, но автоматическая компоновка может быть приятной функцией, когда вы узнаете, как ее использовать. В этом случае вы можете добавить ограничения от subViewRoot к его родительскому представлению - ведущие, трейлинг, сверху и снизу. Управлять перетаскиванием из subViewRoot в родительский элемент является простым ярлыком.

+0

Еще раз спасибо за сверхбыстрый ответ Я попробовал ctrl-перетаскивание из подзона к родительскому виду и заметил несколько вариантов, как вы упомянули (Trailing, Leading). Я не уверен в верхней и нижней части. Чтобы попробовать, я выбрал (трейлинг, ведущий, верхний и нижний), и он показал обрезку pageView, как раньше ... вот фотография. http://i.stack.imgur.com/Wa2Sv.png Любая идея, почему это может не работать, где: Я использую авто-макет и добавляю ограничения, о которых вы упомянули. – Cdub2235

+0

Ваше под просмотр не распространяется на родительский вид. Ограничения свяжут subview с каким-либо количеством точек, находящихся в нем, когда вы добавляете ограничение. – Acey

+0

Кроме того, я не знаю, зачем вам это представление subViewRoot. Просто добавьте представление 'UIPageViewController' в виде подсмотра представления viewController непосредственно, используя ограничения viewController. – Acey

0

Мне удалось получить представление о том, как я хотел использовать ограничения на PageContentViewController, а также добавлять ограничения для SubView на RootViewController. (Как предложил Acey)

Я сделал это, выбрав «разрешить проблемы с автоматической компоновкой» -> Сбросить предложенные ограничения макета.

Затем также ctr-clking внутри представления и установки ограничений ширины и высоты. Я даже могу изменить ориентацию, и макет - это то, что я ожидаю.

для тех, кто борется с этим, не стесняйтесь присылать комментарии или комментарии здесь.