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