iOS 8中UITableViewController中的透明UINavigationBar

时间:2015-06-02 17:17:09

标签: ios objective-c uitableview uiviewcontroller uinavigationbar

我有视图控制器,我将导航栏设置为透明,如下所示:

viewController.navigationController.navigationBar.translucent = YES;
viewController.edgesForExtendedLayout = UIRectEdgeNone;
[viewController.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];

对于我的UIViewController,这种方法很好,我能够得到这个:

enter image description here

然而,当我使用UITableViewController时,它并不起作用,我得到了这个:

enter image description here

导航栏中的灰色背景我无法摆脱。我在iOS 8.3中遇到了这个问题。我已经在iOS 7.1中对它进行了测试,并且工作正常。

修改

我尝试过设置以下内容但没有成功:

tableViewController.navigationController.navigationBar.shadowImage = [UIImage new];
tableViewController.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
tableViewController.tableView.backgroundColor = [UIColor clearColor];

2 个答案:

答案 0 :(得分:0)

有两种方法可以做到:

1。您可以覆盖Navigation Controller类,并在视图控制器的viewDidLoad方法中指定此代码以更改UINavigationBar的颜色。

self.navigationBar.barStyle = UIBarStyle.blue //   you can give color of your choice
self.navigationBar.tintColor = UIColor.whiteColor() // or UIColor clearColor

2.如果您想要普遍使用或想要在整个应用中应用相同颜色的导航栏,请在AppDelegate's :didFinishLaunchingWithOptions方法中使用以下代码:

UINavigationBar.appearance() .barTintColor = UIColor(red: 100.0/255.0, green: 226.0/255.0, blue: 98.0/255.0, alpha: 1.0)  // you can give color of your choice
UINavigationBar.appearance().tintColor = UIColor.whiteColor() // or UIColor clearColor
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()] 

答案 1 :(得分:0)

我相信您还需要设置shadowImage并清除背景颜色。我使用以下内容,它适用于所有控制器上的iOS7和iOS8。

[self.navigationController.navigationBar setBackgroundImage:[UIImage new]
                                              forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f){
    self.navigationController.navigationBar.translucent = YES;
}
else{
    self.navigationController.navigationBar.translucent = NO;
}
self.navigationController.view.backgroundColor = [UIColor clearColor];