У меня довольно простая настройка с UINavigationController внутри UITabBarController.Я хочу программно разметить представление rootViewController этого navcontroller, но когда я смотрю на self.view.frame внутри viewDidLoad, я получаю это (например, в landscape ):
1. view frame: {{20, 0}, {748, 1024}} // looks like an odd portrait mode
Затем я автоматически поворачиваюсь к Портрету, и получаю это:
2. view frame: {{0, 0}, {768, 911}}
Затем, когда я возвращаюсь к Пейзажу, кадр теперь такой:
3. view frame: {{0, 0}, {1024, 655}}
И далеесобытия автоповорота переключатся между значениями кадра № 2 и № 3.
Чтобы обойти странность # 1, я сейчас делаю это в viewDidLoad:
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
self.view.frame = CGRectMake(0, 0, 768, 911);
} else {
self.view.frame = CGRectMake(0, 0, 1024, 655);
}
Я чувствую, что здесь явно что-то упущено.Почему стандартный кадр представления не соответствует кадру, когда он автоматически поворачивается назад в ту же ориентацию?Разве рамка просмотра не установлена в исходную ориентацию?Очень смущенный ...
Я должен упомянуть, что ничего из вышеперечисленного, включая мой хакерский взлом, ничего не меняет визуально.Причина, по которой у меня есть хак, заключается в том, что когда я размещаю свои подпредставления в этом представлении, они будут основаны на том месте, где я их ожидаю, то есть в верхнем левом углу под панелью навигации.
Что я делаю не так?
ОБНОВЛЕНИЕ: отключение всех элементов авторазмера на представлении изменения приводит к результату №1:
view frame: {{0, 0}, {748, 1024}}
Это кажется чуть ближе, но все же не совпадает# 3.