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

时间:2013-08-10 08:41:02

标签: uinavigationbar shadow ios7

Inner shadow example

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

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

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

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

我试过这个:

[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];

但是该代码甚至没有删除栏下方的水平线(此方法需要自定义背景图像)。我使用Xcode版本5.0(5A11365x)

6 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:21)

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

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

enter image description here

答案 2 :(得分:8)

Swift (在iOS9上测试)

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController!.navigationBar.shadowImage = UIImage()

答案 3 :(得分:0)

如果您的应用仅支持iOS 6.0+,则只需添加以下行:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[[UINavigationBar appearance] setShadowImage:[UIImage new]];
...
}

答案 4 :(得分:0)

我遇到了类似的问题,我想从iOS7的导航栏中删除1px线和阴影。 就我而言,我需要在导航栏底部有一条3点粗的绿线。

如果有一个解决方案可以摆脱导航栏底部不涉及遍历子视图的1px行,我不知道,但有一种方法可以添加隐藏该行的视图如下(至少线的颜色可以这样改变)。

UIView * bgView = [[UIView alloc] initWithFrame:CGRectMake(0, navBarHeight, navBarWidth, 1)]; // Dont use magic numbers in your code
bgView.backgroundColor = //some other color
[navigationBar addSubview:bgView];
[navigationBar setShadowImage:nil];

答案 5 :(得分:0)

您可以轻松使用UInavigationBar这个名为UINavigationBar-Addition的{​​{1}}类别here 我已经使用了这个answer中描述的解决方案,但我无法摆脱navigationBar下的1Px线