iOS 8 中 UITableViewController 中的透明 UINavigationBar

Posted

技术标签:

【中文标题】iOS 8 中 UITableViewController 中的透明 UINavigationBar【英文标题】:Transparent UINavigationBar in UITableViewController in iOS 8 【发布时间】:2015-06-02 17:17:09 【问题描述】:

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

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

对于我的UIViewController,这工作正常,我能够得到这个:

但是,当我使用 UITableViewController 时,它并不能正常工作,我得到了这个:

这不是我无法摆脱的导航栏中的灰色背景。我在 ios 8.3 中遇到了这个问题。我已经在 iOS 7.1 中对其进行了测试,并且运行良好。

编辑:

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

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

【问题讨论】:

【参考方案1】:

有两种方法:

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()] 

【讨论】:

感谢您的回答 Vizlix。但是,设置色调颜色和文本颜色不是我的问题(实际上它们是使用UIAppearance 设置的)。我的问题是使用这种常用方法使导航栏透明在 iOS 8 中的 UITableViewController 中不太适用。【参考方案2】:

我相信您还需要设置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];

【讨论】:

嗨,罗里。谢谢你的建议。实际上,我已经尝试过设置shadowInmage,但没有任何运气。我已经尝试过更新我的问题。我希望self.navigationController.view.backgroundColor = [UIColor clearColor]; 能做到这一点,但遗憾的是它没有。 尝试将 UINavigationController 上的导航栏样式设置为黑色。您可能还想将 barTint 设置为清除。

以上是关于iOS 8 中 UITableViewController 中的透明 UINavigationBar的主要内容,如果未能解决你的问题,请参考以下文章

初始化项目

在动态 UITableViewController 的标头中嵌入静态 UITableViewController

pushViewController 不会导致新控制器绘制视图

拉入 UICollectionView 后 UIRefreshControl 不粘

在 xcode 4.3 中使用 UITableViewController xib 创建 UITabbarController

静态单元格不显示在模拟器中[重复]