2010-08-25 2 views
2

В моем приложении для iPhone у меня есть контроллер вида с двумя видами (по существу, передний вид &). Вид спереди - основной UIView, а задний вид - вторичный UIView, который добавляется в качестве подсмотра, используя [self.view addSubview:backView] при отображении задней части и [backView removeFromSuperview] при скрытии. Однако, когда меняется ориентация, у меня возникает следующая проблема: главный UIView (frontView) вращается & все его элементы изменяются правильно, но вторичный/subview UIView (backView) не вращается & все его элементы не изменяются правильно , Есть ли у кого-нибудь предложения по тому, как сделать вторичный UIView автоматически отрегулированным в соответствии с правилами, установленными в Interface Builder?UIView Subview Не авторезистентно при изменении ориентации

ответ

2

В конце концов, решение, которое я нашел, было просто отделить мои UIViews от отдельных UIViewControllers и убедиться, что любые представления, которые я хотел бы повернуть, имели только один UIView.

1

Если я правильно понял, во время вращения «backView» был удален из его супервизора, да? Если это так, в этом причина проблемы. Свойство autoresize определяет, как изменяется размер представления относительно его супервизора. Если у него нет супервизора, он не будет изменять размер.

Возможно, использование [backView setHidden: YES] вместо [backView removeFromSuperview] будет достаточным для ваших нужд.

+0

К сожалению, это происходит даже тогда, когда backView также находится в режиме супервизора. И я просто попробовал ваше предложение использовать '[backView setHidden: YES]', и это тоже не помогло. – Jason

+0

Является backView.autoresizesSubviews == ДА? Предположительно, это будет так, потому что это дефолт, но пока это единственное, что я могу придумать. – imaginaryboy

+0

Да, это равно YES. – Jason

0

У меня была такая же проблема, вот как я установил его на основе предложений imaginaryboy в (спасибо!)

Добавьте Backview к ViewController в viewDidLoad и спрятать его в то же самое время. Покажите это при необходимости, Скройте его снова. Установите изменение размера backview на UIViewAutoresizingFlexibleWidth в IB (или код, я думаю, я использовал IB)

0

Не то, чтобы это была та же проблема, но я обнаружил аналогичную проблему при добавлении 2 подзадач в моем приложении: метод didFinishLaunchingWithOptions. Поскольку ваша ссылка выше использует [self.view addSubview: view], я бы понял, что это означает, что я не являюсь вашим UIWindow. При добавлении дополнительного диспетчера представлений в окно App Delegate (UIWindow), второй контроллер просмотра НЕ будет получать никаких событий вращения и никогда не будет вращаться. Только первый контроллер представления, добавленный в UIWindow, будет вращаться. См .: Technical Q&A QA1688 Я считаю, что это также влияет на представления, добавленные после первого представления, где первое представление впоследствии удаляется из супервизора.

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

0

Or; если вы хотите, чтобы избежать дополнительного контроллера, вы можете достичь того же эффекта, установив view.frame в willRotateToInterfaceOrientation :: как так

if(UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) ;//set stubborn view.frame for landscape orientation 

    else ; //set stubborn view.frame for portrait orientation 

Хотя это чувствует, как взломать; это просто.

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