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