Я хочу использовать UIScrollView
в качестве основного контейнера в приложении, что позволяет мне перемещаться назад и вперед между подпредставлениями.Для этого я создал UIViewController
подкласс с UIScrollView
IBOutlet :
. В методе viewDidLoad
я создаю подстраницы:
for (int i= 0; i< pageCount; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIWebView* aWebView= [[UIWebView alloc] initWithFrame:frame];
[self.scrollView addSubview:aWebView];
}
При запуске приложения (портретный режим) все работает.То есть UIWebViews
располагаются рядом с правильными размерами, и я могу перемещаться назад и вперед между ними.
Когда я поворачиваюсь в альбомную ориентацию, кажется, что ни размер прокрутки, ни подпредставленияизменяются в размерах.
Я не знаю, что мне следует делать, чтобы изменить размеры подпредставлений и самого прокрутки, или в какой момент кода я должен что-либо делать, и я не могу найти какие-либо примеры для этого.
Кто-нибудь знает, что делать?
[править] Попытка отрегулировать размеры в соответствии с предложением mahboudz:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * pageCount, self.scrollView.frame.size.height);
for (int i= 0; i< pageCount; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIWebView* view= [[self.scrollView subviews] objectAtIndex:i];
view.frame= frame;
}
}
Этот вид делает то, что я хочу, но имеетследующие проблемы:
1) можно увидеть, что подпредставления увеличиваются до правильного размера экрана при изменении ориентации
2), когда текущая страница, например, страница 2 из 5 страниц, страницане полностью виден после изменения ориентации, но находится за пределами экрана примерно на 40 пикселей
3) Я получаю странные эффекты в зависимости от того, запущено ли приложение в портретном или ландшафтном режиме (симулятор), ilЯ пытаюсь объяснить:
Когда приложение запускается в портретном режиме:
- Форма / граница подпредставлений выглядит испорченной / за кадром, см. скриншоты:
http://i53.tinypic.com/21jr76x.png
- когда я поворачиваюсь в ландшафт, все выглядит хорошо, прокрутка работает превосходно.даже когда я поворачиваюсь назад к портрету, теперь все отлично:
http://i55.tinypic.com/if3iiw.png
Когда приложение запускается в ландшафтном режиме:
Я получаю такие же испорченные глюки вверх / вне экрана, что и в портретном режиме
Переключение назад и вперед между портретным и альбомным режимами исправляет это в ландшафтном режиме
НО: портретный режим будет иметь подпредставления с шириной ландшафтного режима, таким образом подпредставления слишком широки
Я пытался исправить 1), делая код выше в willRotateToInterfaceOrientation
однакоон полностью испортил макет.
Я исправил 2), добавив следующий код в didRotateFromInterfaceOrientation
:
// update the scroll view to the appropriate page
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * self.currentPage;
frame.origin.y = 0;
[self.scrollView scrollRectToVisible:frame animated:NO];
Примечание: текущая страница определяется в scrollViewDidScroll
Понятия не имею, как починить 3)