这似乎在iOS 6中,阴影自动添加到导航栏,即使你设置自定义背景图片。 我敢肯定,这是不是与iOS 5,当我在的iOS 5和6 SIM测试相同的代码的情况下,影子出现在iOS 6中,但不是5。
有人对这个有了解吗? 或如何启用/禁用呢?
这似乎在iOS 6中,阴影自动添加到导航栏,即使你设置自定义背景图片。 我敢肯定,这是不是与iOS 5,当我在的iOS 5和6 SIM测试相同的代码的情况下,影子出现在iOS 6中,但不是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.navigationController.navigationBar.clipsToBounds = YES;
从该主题的苹果开发文档注意shadowImage
属性:
讨论:默认值是零,其对应于默认阴影图像。 当非空,这个属性代表自定义阴影图像显示,而不是默认。 forBarMetrics:方法对于要显示的自定义阴影图像,定制的背景图像也必须与了setBackgroundImage设置。 如果使用默认的背景图像,那么默认的阴影图像将被使用,无论此属性的值。
因此,使用零的UIImage砍你还必须设置自定义导航栏的背景图片。 这可以是一个无图像太,这将导致一个很好的平坦,干净的“地铁”式导航栏:
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
你也可以试试这个:
controller.navigationBar.shadowImage = [[[UIImage alloc] init] autorelease];
控制器是一个UINavigationController。
一般情况下,非NDA侵权的答案:
如果你不想要的东西伸出一个层,屏蔽层,其边界。
[self.layer setMasksToBounds:YES];
明确地将高度设置为44(或32适用于iPhone横向)如果不能在自己的工作。
在的ShadowImage设置为空图像确实在增加一个属性,如果操作系统比iOS 6的早期工作,然而,该解决方案的方式呈现结果。
一个更好的办法做一些事情,是依赖于属性或方法的存在是:
if ([self.navigationController.navigationBar
respondsToSelector:@selector(shadowImage)]) {
self.navigationController.navigationBar.shadowImage = [[[UIImage alloc] init] autorelease];
}
有两个可能的解决方案,其中第二个在其他的答案中提到。
执行以下代码:
// 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];
不工作,我发现一个简单而可行的方法来消除的阴影UINavigationBar
中谁需要能够看到这个帖子不论是iOS 6和iOS 5,希望人们。
所有你需要做的就是准备一个背景图片的高度为1个像素比你的导航栏高度较大(如320×45默认UINavigationBar的,640×90,当然2倍)。
然后,只需使用[[UINavigationBar appearance] setBackgroundImage: ...]
你会发现影子是由1个像素所取代。 干杯!
顺便说一句,我发现Twitter已经做了完全一样的东西,如果你解压缩Twitter.ipa
并考虑bg_nav_bar_events_dark.png
,尺寸为320×47。 他们提出了自己的影子为3个像素:)
我不能评论,所以我会在这里为我的信息。
也许上述建议的测试工作,但它似乎并没有被现在的情况。
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
以上不工作,也不做任何高于其他类似的答案。 我把它们都试过。
裁剪到范围的工作,但并没有给我想要的,因为我想其他视图导航栏外挂的结果。
试图让导航条看iOS6的和iOS7之间的相同,当我遇到这太问题就来了。
我发现工作的回答很干脆的使用方法:
NSMutableDictionary *titleBarAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] titleTextAttributes]];
[titleBarAttributes setValue:[NSNumber numberWithInt:0] forKey:UITextAttributeTextShadowOffset];
[[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes];
即:设置阴影偏移为零。
怎么样的替代方法:
UINavigationBar.appearance().barStyle = .Black
对于黑暗的导航栏iOS不显示阴影。
我有同样的问题,我已经按照解决它:
CustomNavBar *navBar = (CustomNavBar *)self.navigationController.navigationBar;
[navBar setBackgroundImage:[UIImage imageNamed:@"navigation_bar_gray.png"] forBarMetrics:UIBarMetricsDefault];
navBar.shadowImage = [[UIImage alloc]init]; // this is what acctually removed the shadow under navigation bar
在雨燕3.0,这将是这样的
UINavigationBar.appearance().shadowImage = UIImage ()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)