Я пытаюсь программно создать собственный контроллер представления с подпредставлениями, которые находятся в центре экрана. Я преуспел, и когда я перехожу к этому виду, центрированный вид появляется в центре и вращается правильно, когда вы поворачиваете устройство.
Но в этом навигационном приложении, если я вхожу в пользовательский вид, когда не в портретном режиме, то вид, который должен быть центрирован, позиционирует себя в месте, которое не является центром экран. Я поместил все необходимые свойства авторазмера в представлениях, контроллере, родителе, бабушке, святой девственнице ... и у меня закончились вещи, чтобы прикрепить маску авторазмера, и все же пример выглядит плохо.
Я уверен, что мне не хватает вызова какого-то магического метода, который все исправит, но я не понял, что и куда вызывать (setNeedsDisplay? SetNeedsLayout?). Чтобы продемонстрировать эту проблему, я создал полный пример, доступный по адресу https://github.com/gradha/iPhone-centered-rotation-test, который вы можете клонировать и запустить в симуляторе или устройстве. Я создал это из навигационного контроллера Apple, просто добавив поддельную ячейку, которая выдвигает вид, который я создаю вручную.
Пользовательское представление можно найти по адресу https://github.com/gradha/iPhone-centered-rotation-test/blob/master/Classes/CenteredViewController.m, а вот метод loadView, отвечающий за создание центрированных подпредставлений:
/* Try to force the parent view to be as we want it. */
self.view.backgroundColor = [UIColor yellowColor];
self.view.autoresizesSubviews = YES;
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleWidth;
/* Top left blue square, for reference. */
blue_ = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 130, 130)];
[self.view addSubview:blue_];
blue_.backgroundColor = [UIColor blueColor];
[blue_ release];
/* Create red centered rectangle. */
red_ = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
red_.backgroundColor = [UIColor redColor];
red_.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin;
red_.center = self.view.center;
[self.view addSubview:red_];
[red_ release];
Вот ссылка на пошаговое руководство для захвата экрана приложения , сначала войдите в портретный режим и поверните экран (работает нормально), затем войдите в альбомный режим и поверните (в зависимости от того, с какой стороны вращения он выглядит довольно плохо). Когда вы входите в вид в ландшафтном режиме, в зависимости от ориентации красный квадрат будет иметь верхний левый угол 196x34 или 140x34, что слишком большая разница.
Чего мне не хватает, чтобы правильно настроить эти подпредставления при входе в вид в альбомной ориентации и выполнить автоматический поворот?