2013-11-19 3 views
3

Я использую раскадровку для проекта. У меня есть верхнее меню с 3 кнопками (UIView с 3 UIButton в нем) с таким же расстоянием между ними.UIView перестраивается при повороте

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

я сделал следующее:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)orientation { 
    [super didRotateFromInterfaceOrientation:orientation]; 
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 
    if (UIDeviceOrientationIsLandscape(deviceOrientation)){ 
     [self prepareLandscapeLayout]; 
    } 
} 

- (void) prepareLandscapeLayout { 
    [[self topMenu] setFrame:CGRectMake(0, 0, IS_IPHONE_5 ? 568 : 480, 59)]; 
    [[self cameraButton] setCenter:CGPointMake(232, 26)]; 
    [[self settingsButton] setCenter:CGPointMake(288, 26)]; 
    [[self videoList] setCenter:CGPointMake(340, 26)]; 
} 

prepareLandscapeLayout функция вызывается после того, как вращение, но кнопки остаются в своих исходных позициях. Я также вижу, как topMenu растягивается после вращения (я изменил цвет фона).

Есть ли идеи о том, что я могу сделать неправильно?

+0

Установка центра кнопки не растянет его, он просто переместит его. Измените фактический кадр кнопки, как вы делаете это с верхним меню – danypata

+0

@ danypata Я не хочу изменять их размер, мне просто нужно поместить их в новую позицию – user2786037

ответ

1

До тех пор, пока вы не хотите использовать раскадровки назна для вращения и ограничений, вы должны прекратить использовать «Autolayout»

См Interface Builder Document в любом контроллере на правой панели раскадровки в.

0

Центр по отношению к его первоначальной ориентации и рассчитан из кадра (также относительно оригинальной ориентации).

Вместо этого попробуйте изменить кадры относительно границ родительского представления (это обновление основано на ориентации).

+0

, если я изменю setCenter на setFrame, ничего не изменится. – user2786037

+0

При изменении рамки используйте topMenu.bounds вместо topMenu.frame. – DrDisc

0

Если рамки topMenu меняются, напишите как.

- (void) prepareLandscapeLayout 
{ 
[[self topMenu] setFrame:CGRectMake(0, 0, IS_IPHONE_5 ? 568 : 480, 59)]; 
[[self cameraButton] setFrame:CGRectMake(0,0,actualWidth,actualHeight)]; 
[[self settingsButton] setFrame:CGRectMake(topMenu.frame.size.width/3,0,actualWidth,actualHeight)]; 
[[self videoList] setFrame:CGRectMake((topMenu.frame.size.width/3)*2,0,actualWidth,actualHeight)]; 
} 
+0

, как я уже упоминал ранее, он также не вносит никаких изменений. Извините ... – user2786037

+0

Является ли рама topMenu в ориентации? –

+0

хорошо, если факт он вращается с телефоном, но остается приклеенным к текущей верхней части телефона (он выглядит как url-бар в режиме ландшафта сафари) и растягивается до полной ширины телефона. – user2786037

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