我有一个导航控制器,我在其中设置了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的过程中变回半透明。它几乎闪烁不透明,然后变回半透明。
当我然后按下到下一个表格视图,或者返回(通过按导航栏左上角的按钮,或者通过弹出视图)它不会闪烁。它一直保持半透明状态,直到整个导航控制器被解除。
我认为这可能是因为笔尖设置了一个不透明的条形,但我尝试了各种类型的选项(半透明,常规蓝色,没有条形),它仍然可以做到。
此外,它在我的应用程序中的两个完全独立的导航控制器上执行此操作。对不起,如果我做了一些明显错误的事情,但我已经尝试了很多选项组合,我只是不知所措。
谢谢!
答案 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];
希望这可以帮到你。