У меня есть UIScrollView, который содержит кучу подпредставлений. Если вид изначально загружен в альбомной или портретной ориентации, то все в порядке. Однако, когда я пытаюсь справиться с изменением ориентации, ничего не происходит.
Проблема в том, что фреймы подпредставлений обновляются, но не перерисовываются.
На данный момент я использую это для установки рамок при изменении ориентации:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
int i = 0;
for(UIView *subview in [scroll subviews]) {
if([subview isKindOfClass:[GalleryThumbContainerView class]]) {
[subview setFrame:[self getFrameLandscape:i]];
i++;
} else {
}
}
}
Если устройство находится в портретном режиме, а я поворачиваю его в горизонтальное положение, ни один из новых кадров не обновляется.
Если я держу устройство в портретном режиме и оставляю вид, то возвращаюсь все новые кадры обновляются.
Это наводит меня на мысль, что это некоторая проблема с набором, который не обновляется. Я пробовал:
[self.view setNeedsDisplay];
[self.view setNeedsLayout];
[self.scroll setNeedsDisplay];
[self.scroll setNeedsLayout];
Ни одна из которых не работает.
Мне удалось «заставить» это работать:
- Удаление всех подпредставлений scrollView
- Настройка всех подвидов нового кадра
- Повторное добавление всех подпредставлений назад scrollView
Кажется, есть более чистый способ сделать это.
Я также попытался добавить слушателя изменения ориентации в мой подкласс подвидов (полный рот) и сохранить в каждом подвиде альбомную и портретную рамки. Затем переключение слушателем. Что это тоже не сработало.
Любая помощь очень ценится и спасибо за ваше время.