在iOS 6中,即使您设置了自定义背景图像,导航栏似乎也会自动添加一个下拉阴影。 我相信这在iOS 5中不是这种情况,因为当我在iOS 5和6模拟器中测试相同的代码时,在iOS 6中出现阴影但在iOS 5中则没有。
有人知道这方面的信息吗?或者如何启用/禁用它?
在iOS 6中,即使您设置了自定义背景图像,导航栏似乎也会自动添加一个下拉阴影。 我相信这在iOS 5中不是这种情况,因为当我在iOS 5和6模拟器中测试相同的代码时,在iOS 6中出现阴影但在iOS 5中则没有。
有人知道这方面的信息吗?或者如何启用/禁用它?
将此代码放置于您的AppDelegate中
[[UINavigationBar appearance] setShadowImage:[UIImage new]];
// is IOS 7 and later
[[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = nil;
并不像答案中描述的技术产生相同的效果。 - bithavoc[[UINavigationBar appearance] setShadowImage:[UIImage new]];
[[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
- thgc[[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
- Almas Adilbek我知道上面有更复杂的解决方法,但这是最快最简单的方法,我将阴影隐藏在导航栏下面。
self.navigationController.navigationBar.clipsToBounds = YES;
关于shadowImage
属性,以下是Apple开发文档中的说明:
讨论: 默认值为nil,对应默认阴影图像。当非nil时,此属性表示要显示而不是默认阴影的自定义阴影图像。要显示自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。如果使用默认背景图像,则无论此属性的值如何,都将使用默认阴影图像。
因此,要使用nil UIImage hack,您还必须设置自定义导航栏背景图像。这也可以是空图像,从而产生漂亮平整、清洁的“地铁”风格的导航栏:
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
你也可以尝试这个:
controller.navigationBar.shadowImage = [[[UIImage alloc] init] autorelease];
controller是一个UINavigationController。
/*默认值为nil。当非nil时,将显示自定义阴影图像,而不是默认的阴影图像...*/
@property(nonatomic,retain) UIImage *shadowImage NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;
- José M. Gilgado一般而言,与NDA无关的答案:
如果您不想让某个图层中的元素突出显示,可以将该图层裁剪为其边界范围。
[self.layer setMasksToBounds:YES];
如果仅仅设置高度不起作用,那么请明确将高度设置为44(或在iPhone上横向设置为32)。
将shadowImage设置为空图像是可行的,但是,以此解决方案的方式会在iOS 6之前的操作系统中添加属性。
更好的方法是根据属性或方法的存在性进行操作:
if ([self.navigationController.navigationBar
respondsToSelector:@selector(shadowImage)]) {
self.navigationController.navigationBar.shadowImage = [[[UIImage alloc] init] autorelease];
}
Implement the following code:
// Omit the conditional if minimum OS is iOS 6 or above
if ([UINavigationBar instancesRespondToSelector:@selector(setShadowImage:)]) {
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
}
来源: iOS上的高级外观自定义,@27:15
由于self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
无效,我找到了一种简单有效的方法来在iOS 6和iOS 5中移除UINavigationBar
的阴影。希望需要的人能看到这篇文章。
你需要准备一张背景图片,其高度比导航栏高度大1像素(例如默认的UINavigationBar为320×45,当然2x是640×90)。
然后只需使用[[UINavigationBar appearance] setBackgroundImage: ...]
,你会发现阴影被那1个像素替换了。干杯!
顺便说一下,我发现Twitter也做了同样的事情,如果你解压缩Twitter.ipa
并查看bg_nav_bar_events_dark.png
,大小为320×47。他们为3个像素制作了自己的阴影 :)
我无法评论,所以我会在这里添加我的信息。
也许上述建议在测试版中有效,但现在似乎不是这种情况。
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
以上方法都不起作用,其他类似的答案也都试过了。
裁剪边界确实可以起作用,但是它不能给我想要的结果,因为我希望其他视图可以悬挂在导航栏外面。