删除导航栏的底部边框iOS7
有没有办法来删除iOS7自动显示在导航栏下的底部边框?
如果我理解你正确的尝试
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
这不适用于iOS7的导航半透明或不…
来自Apple文档的粘贴;
描述用于导航栏的阴影图像。 默认值是零,这对应于默认的阴影图像。 非零时,此属性表示自定义阴影图像,而不是默认值。 对于要显示的自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。 如果使用默认的背景图像,那么将使用默认的阴影图像,而不pipe该属性的值如何。
所以基本上你需要实现setBackgroundImage。 另外需要注意的是 ,在iOS7上,你不会再使用外观了,但是你现在将在viewController上下文中修改导航栏。
那是:
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]]; [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
在我的情况下,我把它放在viewDidLoad(自定义行为可以添加为UINavigationViewController中的每个UIViewController)。
基于muffed2k回答+编程托马斯评论,这就是我用来显示UINavigationBar没有背景图像(ios5.1 / 6.0)和没有底部边框(ios7.0):
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6) { [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; }else { [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; }
如果你使用Swift,并且遇到这个问题,可以在你的主ViewController中试试这个:
override func viewDidLoad() { super.viewDidLoad() /// ... navigationController?.navigationBar.shadowImage = UIImage(); navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) //... }
根据上面的@ wolffan的回答
对于我来说,当translucent
设置为false
时,在iOS 7上工作到9+
UINavigationBar.appearance().transluscent = false UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics:.Default)
我知道这是已经接受的答案,但另一种方法是将clipToBounds设置为true。
这里是一行代码快速做到这一点
self.navigationController?.navigationBar.clipsToBounds = true
为我工作就像一个魅力。
为客观的目的
self.navigationController.navigationBar.clipsToBounds = YES;
像魅力一样工作: Swift 3.x版本
navigationController?.navigationBar.shadowImage = UIImage() navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
如果你的目标是iOS 7,而不是设置背景图片,那么这将工作:
CGFloat navigationBarWidth = self.navigationController.navigationBar.frame.size.width; CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height; CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height; UIGraphicsBeginImageContextWithOptions(CGSizeMake(navigationBarWidth, navigationBarHeight + statusBarHeight), NO, 0.0); UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault]; //the following line takes away the border but only works if a background image is set (above) [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
我从@ muffe2k的答案, 这个SOpost了 。
- 在iOS 7.0.3上发生了什么“HelveticaNeue-Italic”
- UITabBar不显示在iOS 7中选定的项目图像
- 如何在iOS 7上将状态栏的内容颜色设置为白色
- 解释iOS7中自动调整滚动视图集,extendedLayoutIncludesOpaqueBars,edgesForExtendedLayout之间的区别
- 为什么UIViewController在UINavigationBar下扩展,而UITableViewController没有?
- iOS 7状态栏与Phonegap
- 更改启animation面iOS 7中的状态栏文字颜色
- iOS7 UISwitch其事件ValueChanged:不断调用是这个Bug或什么..?
- 当调用reloadRowsAtIndexPaths时,UITableView弹回到一节的顶部