Возникли некоторые проблемы при изменении ориентации моего приложения для iPadd.
Я написал функцию, которая выкладывает мои подпредставления, чтобы я мог вызывать ее, когда представление отображается или поворачивается.
Функция отлично работает, когда онавызывается функцией viewWillAppear.Но когда функция «willAnimateRotationToInterfaceOrientation» вызывает мою функцию макета («setPositionsForOrientation»), я сталкиваюсь со следующими проблемами:
- При переходе из портретного в альбомное положение у меня смещение 128px слева
- При переходе от альбомной к портретной ориентации у меня отрицательное смещение с левой стороны
У меня сложилось впечатление, что новые свойства фрейма как-то не обрабатываются корректно, так как мой UIScrollViews также должен изменить размер, но они этого не делают.
Вот код, который я написал:
- (void)viewWillAppear:(BOOL)animated{
[self setPositionsForOrientation:self.interfaceOrientation];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)newInterfaceOrientation duration:(NSTimeInterval)duration {
[self setPositionsForOrientation:newInterfaceOrientation];
}
- (void)setPositionsForOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Position the UI elements for landscape mode
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
self.view.frame = CGRectMake(0, 0, 1024, 748);
self.menubarImage.frame = CGRectMake(0, 0, 1024, 121);
self.backgroundImage.frame = CGRectMake(0, 0, 1024, 748);
self.mainCategories.frame = CGRectMake(6, 6, 1012, 55);
self.subCategories.frame = CGRectMake(58, 79, 960, 30);
self.moviesContainer.frame = CGRectMake(6, 204, 1012, 456);
self.searchButton.frame = CGRectMake(935, 709, 80, 30);
}
// Position the UI elements for portrait mode
else {
self.view.frame = CGRectMake(0, 0, 768, 1004);
self.menubarImage.frame = CGRectMake(0, 256, 768, 121);
self.toolbarImage.frame = CGRectMake(0, 924, 768, 80);
self.backgroundImage.frame = CGRectMake(0, 256, 768, 748);
self.mainCategories.frame = CGRectMake(6, 262, 756, 55);
self.subCategories.frame = CGRectMake(58, 335, 704, 30);
self.moviesContainer.frame = CGRectMake(6, 460, 756, 456);
self.searchButton.frame = CGRectMake(680, 963, 80, 30);
}
}
А вот несколько картинок, иллюстрирующих мою проблему ..
Макет в IB(Все подпредставления имеют contentMode, установленный в верхний левый угол)
http://www.abload.de/image.php?img=interfacebuilderl9ey.png
Режим портрета отображается правильно / странно
http://www.abload.de/image.php?img=portrait_oklxf1.png
http://www.abload.de/image.php?img=portrait_failma8y.png
Режим ландшафта отображается правильно / странно
http://www.abload.de/image.php?img=landscape_ok4z2l.png
http://www.abload.de/image.php?img=landscape_failvzuy.png
Что я сделал не так и что более важно, как я могу это исправить?
Я нашел этот пост, который описывает обычный способ, но я не понимаю, как я могу переопределитьМой метод view "layoutSubviews", так как представление является просто свойством моего UIViewController.