2014-01-14 5 views
0

Я делаю приложение PhoneGap iPad. В этом я добавил HybridPage (который содержит webView) в качестве контроллера дочернего представления, а затем после этого экрана добавляю новый контроллер (также удаленный гибридный шаблон из ParentViewController), который содержит Native Controller и снова тот же экземпляр контроллера HybridPage (добавлено два контроллеры как дети).Изменение размера второго контроллера детского вида в iPad

Здесь размер моего собственного контроллера равен (320,704) и размер гибридного контроллера (702,704).

Теперь проблема заключается в том, что я не могу взаимодействовать с Half frame of Hybrid controller с правой стороны (ширина 320 от конца contentoffset представления).

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

  • (аннулируются) setDashboardRootViewController: (UIViewController *) RootViewController

{

if ([[self childViewControllers] containsObject:[MCIPadRootViewController getIPadRootViewController].mcWebViewController]) 

{ 

    [[MCIPadRootViewController getIPadRootViewController] removeMCWebViewController]; 

} 

[self addChildViewController:self.dashboardViewController]; 

[self.dashboardContainerView addSubview:self.dashboardViewController.view]; 

if ([rootViewController isKindOfClass:[MCLoginFlowWebViewController class]]) 

{ 

    [self addChildViewController:[MCIPadRootViewController getIPadRootViewController].mcWebViewController]; 

    [MCIPadRootViewController getIPadRootViewController].mcWebViewController.view.frame = CGRectMake(0, 0, self.mcWebViewContainerView.frame.size.width, self.mcWebViewContainerView.frame.size.height); 

    [self.mcWebViewContainerView addSubview:[MCIPadRootViewController getIPadRootViewController].mcWebViewController.view]; 

} 

}

Где можно установить рамку Детский ViewController в. Здесь я установил рамку представления viewcontroller, но это не работает. Может ли кто-нибудь помочь мне выйти из этой проблемы.

Для получения ясности, пожалуйста, найдите снимок экрана.

ответ

0

Я придумал свое решение.

Проблема заключается в том, что мое приложение открывается в ландшафтном режиме. Поэтому я преобразовал рамки представления в рамки.

[[[self recurringListController] view] setFrame:[[self view] bounds]]; 

Используя вышеуказанный метод, я преодолеваю свою проблему.

0

Обычно вы устанавливаете рамку представления контроллера детского представления в 2 местах.

  1. Перед тем, как добавить его к родительскому. Найдите вызов addChildViewController: в контроллере родительского представления. Установите рамку прямо перед этим вызовом (могут быть 2 вызова addChildViewController :).
  2. Если размер изменяется из-за поворота, вам необходимо сбросить рамку представления контроллера детского представления в представлении контроллера родительского представления. МетодWillLayoutSubviews:.

Вот пример из пользовательского контроллера с разделенным пространством.

Обратите внимание на 2 места, где установлено # 1.

- (void)setMasterViewController:(UIViewController *)controller 
{ 
    if (!_masterViewController) { 
     // Add the new controller 
     controller.view.frame = self.masterView.bounds; 
     [self addChildViewController:controller]; 
     [self.masterView addSubview:controller.view]; 
     [controller didMoveToParentViewController:self]; 
     _masterViewController = controller; 
    } 
    else if (_masterViewController != controller) { 
     // Transition from the old to new controller 
     controller.view.frame = self.masterView.bounds; 
     [_masterViewController willMoveToParentViewController:nil]; 
     [self addChildViewController:controller]; 
     self.view.userInteractionEnabled = NO; 
     [self transitionFromViewController:_masterViewController 
          toViewController:controller 
            duration:0.0 
            options:UIViewAnimationOptionTransitionNone 
           animations:^{} 
           completion:^(BOOL finished) { 
            self.view.userInteractionEnabled = YES; 
            [_masterViewController removeFromParentViewController]; 
            [controller didMoveToParentViewController:self]; 
            _masterViewController = controller; 
           } 
     ]; 

    } 
} 

Вот где # 2 устанавливается:

- (void)viewWillLayoutSubviews 
{ 
    CGRect contentFrame = self.view.bounds; 
    float contentWidth = contentFrame.size.width; 

    CGRect masterRect = contentFrame; 
    CGRect detailRect = contentFrame; 
    CGRect dividerRect = contentFrame; 

    if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) { 
     masterRect.size.width = DEFAULT_SPLIT_POSITION; 
     detailRect.origin.x = DEFAULT_SPLIT_POSITION + DEFAULT_DIVIDER_WIDTH; 
     detailRect.size.width = contentWidth - (DEFAULT_SPLIT_POSITION + DEFAULT_DIVIDER_WIDTH); 
     dividerRect.size.width = DEFAULT_DIVIDER_WIDTH; 
     dividerRect.origin.x = DEFAULT_SPLIT_POSITION; 
    } 
    else { 
     masterRect.size.width = contentWidth; 
     detailRect.origin.x = contentWidth; 
     dividerRect.origin.x = contentWidth; 
    } 

    self.masterView.frame = masterRect; 
    self.detailView.frame = detailRect; 
    self.dividerView.frame = dividerRect; 
} 

[Изменено]

Так что вы можете обновить свой код следующим, так что вы называете все вид контейнера оболочки методы используются и вызывается в правильном порядке.

[MCIPadRootViewController getIPadRootViewController].mcWebViewController.view.frame = CGRectMake(0, 0, self.mcWebViewContainerView.frame.size.width, self.mcWebViewContainerView.frame.size.height); 
[self addChildViewController:[MCIPadRootViewController getIPadRootViewController].mcWebViewController]; 
[self.mcWebViewContainerView addSubview:[MCIPadRootViewController getIPadRootViewController].mcWebViewController.view]; 
[controller didMoveToParentViewController:self]; 

Также я не думаю, что ваш CGRectMake верен. Обычно вы не ссылаетесь на кадр представления, вы ссылаетесь на границы родительского представления. Попробуйте настроить его так и посмотрите, помогает ли это. Это позволит заполнить родительский вид, но вы также можете настроить его.

[MCIPadRootViewController getIPadRootViewController].mcWebViewController.view.frame = self.mcWebViewContainerView.bounds; 
+1

Спасибо За вашу помощь Джесси, Но моя проблема не решена. Также я просто добавил скриншот, чтобы вы поняли мою проблему. Во время отладки я просто нахожу проблему ориентации, т. Е. Фреймворк DetailView (Hybrid) является ландшафтом (1024768), а MasterView - портрета (768,1024). –

+0

При добавлении контроллера детского просмотра требуется больше шагов. Это может быть вашей проблемой. Я вижу, что вы вызываете только addChildViewController :. Этого недостаточно. Прочтите раздел «Реализация контроллера контейнера» документации UIViewController. Вы можете ссылаться на образец кода # 1 для других методов, которые необходимо вызвать. – Jesse

+0

во-первых Мое приложение имеет гибридную страницу (логин), которая имеет полный размер кадра (1024, 768), а затем после этой Гибридной страницы я использую тот же экземпляр гибридной страницы в Dashboard View, который имеет как родные, так и гибридные страницы. а также Мое приложение не поддерживает портрет. Спасибо за ваше ценное предложение Jesse –

Смежные вопросы