我在显示MFMailComposeViewController
时通过调用setBackgroundImage
来重置NavigationBar的背景图像。但是当我尝试通过在mailComposeController:didFinishWithResult:
中第二次调用setBackgroundImage
将图像重置为原始图像时,它不会明显更改背景图像。UINavigationBar setBackgroundImage有时不会立即生效
奇怪的是,日志显示我的导航栏的背景图片已经改变,以后我弹出了几个视图控制器(我不知道这是模式的转变,哪些不是,因为它是人其他的代码),背景图片终于确实更改。但为什么它不立即改变?
这里是我的相关代码中mailComposeController:didFinishWithResult:
:
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"img"]
forBarMetrics:UIBarMetricsDefault];
NSLog(@"Navbar img = %@", [[UINavigationBar appearance]
backgroundImageForBarMetrics:UIBarMetricsDefault]);
感谢@Alex的帮助 - 我不确定它是否在主线程中调用,但在'mailComposeController:didFinishWithResult'中添加'dispatch_async'块并没有改变行为。 – Josh
@Josh 这是值得一击:) 我看的另一个地方是确保你设置的背景图像 - 之后,你已经解雇了mailComposeController和-after-你自己的视图控制器已经再次变得活跃。 –
这对我有效!诀窍是在调用mailComposeController的视图控制器中的'viewWillAppear'内调用'setBackgroundImage'。你可以把它作为答案发布,以便我可以接受它吗? – Josh