黑色半透明导航栏在第一次推动时闪烁不透明

时间:2012-03-07 20:56:53

标签: ios

我有一个导航控制器,我在其中设置了navigationBar.barStyle = UIBarStyleBlack和navigationBar.translucent = YES(根据Apple的建议,因为他们弃用了UIBarStyleBlackTranslucent)。在模拟指标中我的两个nib文件(这不是使用故事板)我将Top Bar设置为黑色导航栏。

SettingsViewController *controller = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];

controller.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeSettings)];

controller.navigationController.navigationBar.barStyle = UIBarStyleBlack;
controller.navigationController.navigationBar.translucent = YES;

[self presentViewController:navController animated:YES completion:nil];

当我出现导航控制器时,它会正确地打开黑色半透明条,但是当我按下到下一个表视图时,导航栏会快速淡化为不透明,然后在大约200ms的过程中变回半透明。它几乎闪烁不透明,然后变回半透明。

当我然后按下到下一个表格视图,或者返回(通过按导航栏左上角的按钮,或者通过弹出视图)它不会闪烁。它一直保持半透明状态,直到整个导航控制器被解除。

我认为这可能是因为笔尖设置了一个不透明的条形,但我尝试了各种类型的选项(半透明,常规蓝色,没有条形),它仍然可以做到。

此外,它在我的应用程序中的两个完全独立的导航控制器上执行此操作。对不起,如果我做了一些明显错误的事情,但我已经尝试了很多选项组合,我只是不知所措。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你不应该只使用BarStyle:

[controller.navigationController.navigationBar setTintColor:[UIColor blackColor]];
[controller.navigationController.navigationBar setTranslucent:YES];

我还会尝试设置样式更改的动画,以便在呈现的视图控制器viewDidAppear方法中使用它更平滑(想想在代码中使用黑色不透明条开始):

...
// Keep that where you want

SettingsViewController *controller = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];

controller.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeSettings)];

// remove the two lines

[self presentViewController:navController animated:YES completion:nil];

}

然后在SettingViewController代码中输入:

- (void) viewDidAppear:(BOOL)animated {
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:duration];

    [controller.navigationController.navigationBar setTintColor:[UIColor blackColor]];
    [controller.navigationController.navigationBar setTranslucent:YES];

    [UIView commitAnimations];
}

答案 1 :(得分:0)

UIViewController实例属性edgesForExtendedLayout设置适当的值,并将backgroundColor设置为navigationController,例如:

self.edgesForExtendedLayout = UIRectEdgeBottom;
self.navigationController.view.backgroundColor = [UIColor whiteColor];

希望这可以帮到你。