如何在iOS 7中删除UINavigationBar内部阴影?

TOV*_*VVV 21 shadow uinavigationbar ios7

内阴影例

我试图将导航栏放在另一个导航栏下方,使其看起来像一个高大的导航栏.但是在iOS 7中,UINavigationBar现在在其顶部和底部都有内部阴影.我真的需要删除它.但我没有找到任何解决方案.它看起来像预渲染的阴影,但实际上它在视图出现后大约0.4秒内缓慢出现.

我几乎尝试了所有东西,但阴影依旧存在.我用以下代码删除了栏下方的水平线:

for (UIView *view in [[[self.navigationController.navigationBar subviews] objectAtIndex:0] subviews]) {
     if ([view isKindOfClass:[UIImageView class]]) view.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何去除阴影.非常感谢!

我试过这个:

[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
Run Code Online (Sandbox Code Playgroud)

但该代码甚至不会删除栏下方的水平线(此方法需要自定义背景图像).我用Xcode 5.0(5A11365x)

Thy*_*raz 56

导航栏底部的"水平"线就是shadowImage.可以通过应用空来简单地删除它UIImage.根据文档,您还必须设置自定义背景图像:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set the background and shadow image to get rid of the line.
    [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
}
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的问题是导航栏中没有半透明效果. (3认同)

Ram*_*ino 21

我真的不应该像CaptJak所指出的那样,但是对于任何被困的人来说:

for (UIView *view in self.navigationController.navigationBar.subviews) {
    for (UIView *view2 in view.subviews) {
        if ([view2 isKindOfClass:[UIImageView class]]) {
            [view2 removeFromSuperview];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 虽然这有点暴力:这个方法也删除所有带有UIImages的UIBarButtonItem: - /我建议检查高度`if([view2 isKindOfClass:[UIImageView class]] && view2.frame.size.height <2) (4认同)

小智 9

Swift中(在iOS9上测试)

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController!.navigationBar.shadowImage = UIImage()
Run Code Online (Sandbox Code Playgroud)