5

У меня есть приложение с вкладками с UISplitView на одной из вкладок.Почему didRotateFromInterfaceOrientation в категории вызывает проблемы с UISplitView?

Я использую UITabBarController+iAds и имею проблему, которую разработчик до сих пор не смог решить.

К сожалению, это то, что мой интерфейс похож на вращение IPad:

enter image description here enter image description here

Категория называется изнутри AppDelegate и используется следующий код, чтобы обновить объявление, когда устройство поворачивается:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    NSLog(@"Did rotate"); 
    [self layoutBanner]; 
} 

Как я понимаю, это мешает MasterViewController работать правильно, но я не полностью понять принцип, лежащий каскадирование метода вызывает понимание того, как исправить эту проблему.

+0

Что произойдет, если вы не называют '[собственного] layoutBanner' ? –

+0

Проблемы все еще появляются, но рекламный баннер не перезагружается. – Leon

ответ

7

Вот что говорит Руководство разработчика Apple, о методе didRotateFromInterfaceOrientation:

Подклассы могут переопределить этот метод для выполнения дополнительных действий сразу после поворота.

...

Ваша реализация этого метода необходимо вызвать супер в какой-то момент во время ее выполнения.

Мое лучшее предположение, что некоторые операции рисования в контроллере представления не происходят, потому что вы не вызываете метод суперкласса из своей реализации. Попробуйте исправить это следующим образом:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 
    NSLog(@"Did rotate"); 
    [self layoutBanner]; 
} 

UPDATE: КСН 8 Этот метод является устаревшим и больше не вызывается, когда устройство вращается. Вместо этого вы должны использовать новый метод:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
    NSLog(@"Szie changed"); 
    [self layoutBanner]; 
} 
+0

Я уверен, что пробовал это, и это не сработало. Однако я не могу повторить это с iOS 8, потому что по какой-то причине didRotateFromInterfaceOrientation не вызывается на устройствах iOS 8. Кажется, это проблема в категориях, а не в ViewControllers. – Leon

+0

Причина в том, что Apple отказалась от устаревания в iOS 8. Я обновил свой ответ, чтобы отразить это. – Bedford

+0

Хорошо, это сработало и не страдает от проблемы на снимках экрана. Теперь мне просто нужно исправить остальную часть кода. Благодаря! – Leon