2016-07-20 6 views
0

Я пишу настройку, чтобы изменить размер центра управления.Настройка рамки, если в ландшафте не работает iOS

Я пытаюсь установить рамку в зависимости от ориентации.

Это код:

%hook SBControlCenterContainerView 
-(void)layoutSubviews{ 
%orig; 
CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation ]== UIDeviceOrientationLandscapeRight){ 
self.frame = CGRectMake(0, 0, (screenBounds.size.width - 20), 427); 
} else { 
self.frame = CGRectMake(0, 227, screenBounds.size.width - 20, 427); 
} 
} 
%end 

Но кадр не меняется при переходе на ландшафтном режиме. Он устанавливает только фрейм с тем, что установлено для инструкции else. Что я делаю неправильно, и там есть альтернатива?

ответ

0

Избегайте использования [[UIDevice currentDevice] orientation.... Это аппаратная ориентация и не всегда отражает истинное состояние пользовательского интерфейса. Вместо этого используйте UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation].

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

0

Вы можете просто установить центр SBControlCenterContainerView в его родителя, надеясь, что это поможет и удачи.

// In Parent UIViewController 
self.sBControlCenterContainerView.center = self.view.center;