IOS 9: кадр больше не установлен в viewWillAppear после UINavigationController pushViewController
Я пытаюсь решить проблему размещения места размещения, возникшую с iOS 9. Я создаю экземпляр контроллера представления из файла xib (неавтоматизированного) и затем нажимаю его на мой UINavigationController
.
Проблема заключается в том, что когда вызывается метод контроллера viewWillAppear
, его кадр еще не настроен на размер контроллера навигации и все еще находится в файле xib. Теперь он не устанавливается правильно до viewDidAppear
.
Это полностью заворачивает мой код. Кто-нибудь знает, что изменилось, что вызывает это, и как лучше всего справиться с этим? Я не хочу ждать до viewDidAppear
, потому что это будет выглядеть плохо и сделать плохой опыт работы с пользователем.
Ответы
Ответ 1
Я также ищу лучшее решение.
Моим временным является вызов кода, который был в "viewDidAppear" в "viewDidLayoutSubviews". Таким образом, мой код будет вызван, как только будут установлены кадры.
Но не забудьте добавить логическое или что-то такое, чтобы ваш код не вызывался каждый раз, когда viewDidLayoutSubviews вызывается
-(void)viewDidLayoutSubviews{
if (didLayoutSubviews == NO){
didLayoutSubviews = YES;
// perform code that was in viewWillAppear
}
}
Ответ 2
Я тоже ошибся,
попытайтесь снять флажок "Изменить размер изображения из NIB" из раскадровки
Ответ 3
Попробуйте переместить код макета с viewWillAppear
на viewWillLayoutSubviews
.
Ответ 4
Немного обновленный ответ NickProvost:
private var loadViewToken: dispatch_once_t = 0
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
dispatch_once(&loadViewToken) { [weak self] in
if let wSelf = self {
wSelf.setupView()
}
}
}