0

Я возвращаю фоновое изображение навигационной панели, вызывая setBackgroundImage при показе MFMailComposeViewController. Но когда я пытаюсь сбросить изображение до его оригинала, вызывая setBackgroundImage второй раз в mailComposeController:didFinishWithResult:, он не заметно меняет фоновое изображение.UINavigationBar setBackgroundImage иногда не принимает немедленного эффекта

Странная вещь, что журнал показывает мне, что фоновое изображение в Панели навигации по имеет изменилось, и после того, как я поп несколько представлений контроллеров (я не уверен, являются модальными переходами и которые не являются, потому что кто-то еще код), фон изображение наконец делает изменение. Но почему это не меняется сразу?

Вот мой соответствующий код внутри mailComposeController:didFinishWithResult::

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"img"] 
            forBarMetrics:UIBarMetricsDefault]; 
NSLog(@"Navbar img = %@", [[UINavigationBar appearance] 
          backgroundImageForBarMetrics:UIBarMetricsDefault]); 

ответ

1

Еще одно предложения, чтобы убедиться, что вы устанавливаете фоновое изображение после вы сместили mailComposeController и после собственного контроллера представления активизировался снова.

0

Вы уверены, что ваш -mailComposeController: didFinishWithResult: вызывается в главном потоке, где вы должны делать все ваши Ui работы?

Попробуйте выполнить свой -setBackgroundImage: forBarMetrics: вызовите основной поток и посмотрите, поможет ли это.

Например:

dispatch_async(dispatch_get_main_queue(), ^{ 
     [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"img"] 
             forBarMetrics:UIBarMetricsDefault]; 
    }); 
+0

Спасибо, @Alex, за помощь. Я не уверен, что он вызывается в основном потоке, но добавление блока 'dispatch_async' внутри' mailComposeController: didFinishWithResult' не изменило поведения. – Josh

+0

@Josh Это было достойное внимание :) Другое место, которое я бы хотел, чтобы убедиться, что вы устанавливаете фоновое изображение, после того, как вы отменили почтовый коммандер и после того, как ваш собственный контроллер представления имеет снова активизируется. –

+0

Это сработало для меня! Трюк состоял в том, чтобы вызвать 'setBackgroundImage' внутри' viewWillAppear' в контроллере представления, который вызвал mailComposeController. Можете ли вы опубликовать его в качестве ответа, чтобы я мог его принять? – Josh

Смежные вопросы