Почему мои подпредставления не центрируются правильно в зависимости от ориентации устройства?

Я пытаюсь программно создать настраиваемый контроллер представления с подчиненными представлениями, которые располагаются в центре экрана. Мне это удалось, и когда я перехожу к этому представлению, центрированный вид отображается в центре и правильно вращается при повороте устройства.

Но в этом приложении навигации, если я перехожу в пользовательский вид, когда не в портретном режиме, то вид, который является должно быть по центру, позиционируется в месте, которое не является центром экрана. Я поместил все необходимые свойства автоматического изменения размера в представления, контроллер, родительский элемент, бабушку, святую девственницу ... и у меня закончились вещи, на которые можно было бы приклеить маску автоматического изменения размера, и все же пример выглядит плохо.

Я уверен, что мне не хватает вызова какого-то волшебного метода, который все исправит, но я не понял, что и куда вызывать (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,root @ woyo test] # strace -o /tmp/lsof.strace -p 5625 Процесс 5625 подключен - прерывание для выхода q Кто-нибудь знает?

[root@woyo test]# strace -o /tmp/lsof.strace -p 5625
Process 5625 attached - interrupt to quit
q

Кто-нибудь знает?

10
задан compiler 25 March 2011 в 10:10
поделиться