2015-07-16 2 views
1

Я пытаюсь сделать что-то вроде этого -IOS addSubview нового контроллера представления не работает

- (void)viewDidLoad { 
    [super viewDidLoad];  
    ThingViewController *thingViewController = [self thingControllerForCard:self.card]; 
    thingViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
    UIView *view = [thingViewController view]; 
    [self.view addSubview:view]; 
} 

Это просто дает мне белый экран с ничего в нем. Если я нажму новый контроллер просмотра в стеке навигации, он правильно отобразит контроллер. Любая идея, что я могу пропустить?

+1

Вы не должны просто добавить один вид VC на другой контроллер зрения - нужно сказать, как VCs, что у них есть контроллер представления ребенка/родителя. Соответствующие вызовы методов описаны в [Реализация контрольного контроллера пользовательских контейнеров] (https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html#//apple_ref/doc/uid/TP40007457- CH18-SW12) в Руководстве по программированию контроллера Apple. – pbasdf

ответ

2

Вы должны установить рамку thingViewController на viewDidLayoutSubviews. viewDidLoad не имеет рамки, установленные правильно в это время:

- (void)viewDidLoad { 
    [super viewDidLoad];  
    ThingViewController *thingViewController = [self thingControllerForCard:self.card]; 
    UIView *view = [thingViewController view]; 
    [self.view addSubview:view]; 
} 

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

    thingViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
} 
+1

Это на правильном пути, но viewDidLayoutSubviews - это действительно правильное место для просмотра представлений. viewDidLayoutSubviews будет вызван, например, если изменяется кадр представления. viewWillAppear только вызывается, когда представление добавляется в иерархию представления. – Aurast

+0

обновлено, спасибо @rschmidt. Забавно, мне нравится использовать viewDidLayoutSubviews для настройки рамки, не знаю почему я забыл об этом. – Erakk

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