UIView Subview Не изменять размеры при изменении ориентации - PullRequest
2 голосов
/ 25 августа 2010

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

Ответы [ 5 ]

2 голосов
/ 18 октября 2010

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

1 голос
/ 25 августа 2010

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

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

0 голосов
/ 01 ноября 2011

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

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

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

Хотя это похоже на взлом;это просто.

0 голосов
/ 15 февраля 2011

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

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

0 голосов
/ 21 декабря 2010

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

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

...