如何将导航栏颜色应用于扩展中的状态栏?

时间:2016-08-17 15:40:06

标签: ios swift

如果在动作扩展程序中,我按如下方式更改导航栏的颜色:

class ActionViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        UINavigationBar.appearance().barTintColor = UIColor.green

然后结果如下所示,状态栏显示为白色:

enter image description here

但是如果同一行(UINavigationBar.appearance().barTintColor)应用于应用程序(而不是扩展名),则结果会有所不同,例如,如果将以下行添加到XCode主从模板项目中:

class MasterViewController: UITableViewController {
    override func viewDidLoad() {
        UINavigationBar.appearance().barTintColor = UIColor.green

然后这是状态栏也为绿色的结果:

enter image description here

如何让状态栏在动作扩展程序中显示为绿色?

1 个答案:

答案 0 :(得分:5)

这是因为默认ActionViewController在没有UINavigationController的情况下使用UINavigationBar。如果您查看ActionViewController的故事板,您可以看到UINavigationBar比它更短20分用于UINavigationController。

statusBar背后的视图是rootView而不是NavigationBar。

解决方案是:

1.更改viewController结构以包含UINavigationController。

2.在状态栏下方添加statusBarBackgroundview,并更改其颜色:

- (void)viewDidLoad {
   [super viewDidLoad];

   [UINavigationBar appearance].barTintColor = [UIColor greenColor];

   UIView* statusBarBackgroundView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)];
   statusBarBackgroundView.backgroundColor = [UIColor greenColor];

   [self.view insertSubview:statusBarBackgroundView atIndex:0];
}