21

内阴影示例

我正在尝试将导航栏放在另一个导航栏下方,以使其看起来像一个高大的导航栏。但在 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)

4

6 回答 6

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];
}
于 2013-10-09T18:11:55.843 回答
21

我真的不应该像 CaptJak 指出的那样,但对于其他陷入困境的人:

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

在此处输入图像描述

于 2013-08-12T05:50:24.973 回答
9

Swift中(在 iOS9 上测试)

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController!.navigationBar.shadowImage = UIImage()
于 2015-10-03T21:17:28.217 回答
0

If your app support only iOS 6.0+, you can simply add below line:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[[UINavigationBar appearance] setShadowImage:[UIImage new]];
...
}
于 2013-11-18T16:25:55.660 回答
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];
于 2014-03-10T17:21:39.707 回答
0

您可以轻松使用在此处找到的此UInavigationBar类别 我已使用此答案中描述的解决方案,但我无法摆脱 navigationBar 下的 1Px 行UINavigationBar-Addition

于 2015-12-31T18:58:14.937 回答