Проверьте свои флаги авторазмера, используя NSLog
, например:
NSLog(@"scroll view = %@", self.scrollView); // or whatever the scroll view is named
NSLog(@"scroll view superview autoresizesSubviews = %d", self.scrollView.superview.autoresizesSubviews);
Вы хотите увидеть что-то вроде этого:
scroll view = <UIScrollView: 0xdbdf200; frame = (0 20; 320 460); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0xd35efb0>; contentOffset: {0, 0}>
scroll view superview autoresizesSubviews = 1
Авторазмер будет "W + H"если флаги установлены правильно, а для суперпредставления свойство autoresizesSubviews
должно иметь значение YES
(зарегистрировано как 1
).
Если авторазмер не работает, я настоятельно рекомендую выяснить, почему нетпотому что использование хака для ручного изменения размера при ротации только усложнит поддержку вашего кода.
При этом система отправляет вашему контроллеру представления несколько сообщений, связанных с ротацией интерфейса.Некоторые отправляются до обновления границ корневого представления, а некоторые отправляются после.Порядок такой:
- Система отправляет вам
shouldAutorotateToInterfaceOrientation:
. - Система отправляет вам
willRotateToInterfaceOrientation:duration:
. - Система изменяет границы корневого представления ипреобразовать, чтобы отразить новую ориентацию интерфейса.Благодаря автоматическому изменению размера и переопределению
layoutSubviews
, обычно выполняется разметка всей иерархии представления. - Система отправляет вам
willAnimateRotationToInterfaceOrientation:duration:
. - Система выполняет анимацию.
- Система отправляет вам
didRotateFromInterfaceOrientation:
.
Поэтому, если вам нужно настроить макет пользовательского интерфейса для поворота интерфейса, вы можете сделать это, переопределив layoutSubviews
в подклассах пользовательского представления.или вы можете сделать это в willAnimateRotationToInterfaceOrientation:duration:
, который отправляется после обновления корневого представления.