2013-03-08 1 views
0

У меня есть некоторые пользовательские кнопки добавить к просмотру в -viewDidLoad Я хочу, чтобы по центру вертикально внутри вида, например, так:Вертикальное центрирование вида, автоматическое изменение и iPhone 5 4" экран

self.customButton.center = CGPointMake(98.f, self.view.center.y); 

Однако мнения высота равна 504.0 даже на 3,5-дюймовом устройстве, где я ожидаю, что оно будет 416 (480 - 20 (высота строки состояния) - 44 (высота навигационной панели)).

Вид в xib использует «Retina 4 Fullscreen», но настройка его на свободную форму не помогает. Я, конечно, не хочу, чтобы два xibs учитывали разницу в высоте.

Я знаю, что могу использовать UIScreen, но я бы предпочел, чтобы представление было известно о разнице в высоте.

EDIT: странная вещь, в -viewWillAppear, высота просмотра правильно установлена ​​на 416.0. Почему это не обрабатывается после того, как [super viewDidLoad] находится вне меня.

Как люди обрабатывают это? Autolayout, вероятно, справится с этим, но мне нужен iOS5-совместимый метод. Может ли авторезистировать ручку «центрирования» каким-то образом?

+0

Существует ограничение на размещение, называемое центром по вертикали. Вы можете попробовать это. – Douglas

+0

Я полагаю, вы имеете в виду автозапуск, который является iOS6 + – Morrowless

+0

Извините, неправильно прочитал это последнее предложение! – Douglas

ответ

8

У вас нет автозапуска в iOS5, но у вас все еще есть авторезистирующая маска. Если вы центрируете вертикальное представление в IB, перейдите к инспектору и отмените выбор вертикальных распорок и пружин в масках автоотключения, представление будет центрироваться по вертикали на обоих экранах 4 "и 3.5".

Или вы можете сделать это в коде в вашем методе viewDidLoad. Просто центрировать вид, как вы сейчас и установить autoresizingMask так:

self.customButton.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | \ 
             UIViewAutoresizingFlexibleTopMargin); 
1

EDIT: нечетная вещь, в -viewWillAppear, высота вид правильно установлен на 416,0. Почему это не обрабатывается после того, как [super viewDidLoad] находится вне меня.

Поскольку изменение размера изображения не является частью загрузки изображения! -viewDidLoad вызывается из -view в способе, который, вероятно, выглядит немного как это:

-(UIView*)view 
{ 
    if (!_view) 
    { 
    [self loadView]; 
    [self viewDidLoad]; 
    } 
    return _view; 
} 

-(void)loadView 
{ 
    // Some code to load the view from a nib/storyboard... 
} 

мнение будет происходить изменение размеров с вызовом, как yourViewController.view.frame = ..., но это может произойти только после загружается вид (и, таким образом, после того, как -viewDidLoad).

Установите несколько масок для авторезистировки. Для этого они и есть.

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