使用透明背景图像过渡到UINavigationBar会导致黑色闪烁

时间:2014-12-11 03:53:30

标签: ios cocoa-touch uinavigationbar

我想从白色UINavigatinonBar导航到透明UINavigationBar

在我的根视图控制器中,这是设置:

self.navigationController.navigationBar.hidden = NO;
[self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]];
[self.navigationController.navigationBar setTranslucent:NO];

保持非半透明非常重要。 这是第二个视图控制器中的设置:

// set title of navbar 
self.title = [self.data objectForKey:@"title"];
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
//

// IMPORTANT PART: make the nav bar transaparent - no prerequisites. 
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;

// set custom back button
UIButton *backButton = [[UIButton alloc] initWithFrame: CGRectMake(16, 31, 22, 20)];
UIImage *backImage = [UIImage imageNamed:@"backButtonDetail"];
[backButton setBackgroundImage:backImage  forState:UIControlStateNormal];
[backButton setTitle:@"" forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(popBack) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = backButtonItem;

除了动画之外,这几乎很好:

enter image description here

如您所见,当我为其设置动画时,背景会变黑。我想将白色淡入目标颜色。它现在从黑色背景动画。

我尝试在导航栏下设置自定义UIView,但这不起作用。

我现在很失落如何解决这个问题,任何帮助都会受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

我最近遇到了同样的问题,只需在appDelegate的didFinishLaunchingWithOptions

中设置窗口的背景颜色就可以解决这个问题。
window.backgroundColor = UIColor.whiteColor()

如果您还没有对窗口的引用,那么

UIApplication.sharedApplication().delegate?.window.backgroundColor = ...

我发现这是最干净的解决方案。希望它有所帮助,虽然有点晚。