Iphone 如何在iOS 6中禁用带有自定义背景图像的导航栏的导航栏阴影?
在iOS 6中,即使设置了自定义背景图像,也会自动将阴影添加到导航栏中。我很确定iOS 5不是这样,因为当我在iOS 5和iOS 6 sim卡中测试相同的代码时,阴影出现在iOS 6中,而不是5中Iphone 如何在iOS 6中禁用带有自定义背景图像的导航栏的导航栏阴影?,iphone,uinavigationbar,shadow,ios6,Iphone,Uinavigationbar,Shadow,Ios6,在iOS 6中,即使设置了自定义背景图像,也会自动将阴影添加到导航栏中。我很确定iOS 5不是这样,因为当我在iOS 5和iOS 6 sim卡中测试相同的代码时,阴影出现在iOS 6中,而不是5中 有人知道这件事吗?或者如何启用/禁用它?一般、不违反保密协议的回答: 如果你不想让某个东西从某个层中伸出来,请将该层遮罩到其边界 [self.layer setMasksToBounds:YES]; 如果单独不起作用,请将高度显式设置为44(或iPhone上的横向设置为32)。您也可以尝试以下方法:
有人知道这件事吗?或者如何启用/禁用它?一般、不违反保密协议的回答: 如果你不想让某个东西从某个层中伸出来,请将该层遮罩到其边界
[self.layer setMasksToBounds:YES];
如果单独不起作用,请将高度显式设置为44(或iPhone上的横向设置为32)。您也可以尝试以下方法:
controller.navigationBar.shadowImage = [[[UIImage alloc] init] autorelease];
控制器是一个UINavigationController。我遇到了同样的问题,我通过以下方法解决了它:
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
我知道这已经用上面更复杂的答案解决了,但这是我在导航栏下隐藏阴影的最快最简单的方法
self.navigationController.navigationBar.clipsToBounds = YES;
我无法发表评论,因此我将在此处添加我的信息 也许上述建议在测试版中奏效了,但现在看来并非如此
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
上面的答案不起作用,上面的其他类似答案也不起作用。我都试过了
剪裁到边界确实有效,但不会给出我想要的结果,因为我希望其他视图挂在导航栏外。将阴影图像设置为空图像确实有效,但是,如果操作系统早于iOS 6,则解决方案的呈现方式会导致添加属性 根据属性或方法的存在来做某事的更好方法是:
if ([self.navigationController.navigationBar
respondsToSelector:@selector(shadowImage)]) {
self.navigationController.navigationBar.shadowImage = [[[UIImage alloc] init] autorelease];
}
将其放置在AppDelegate中
[[UINavigationBar appearance] setShadowImage:[UIImage new]];
// is IOS 7 and later
[[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
这就是为我做的。希望有帮助
Swift版本及评论更新
有两种可能的解决办法,其他答复中提到了第二种
//如果最小操作系统为iOS 6或更高版本,则省略条件
if([UINavigationBar实例响应选择器:@selector(setShadowImage:)])){
[[UINavigationBar外观]设置阴影图像:[[UIImage alloc]init]];
}
来源:,@27:15苹果开发文档中关于
shadowImage
属性主题的注释:
讨论:默认值为nil,与默认值相对应
阴影图像。非nil时,此属性表示自定义阴影
要显示的图像,而不是默认图像。对于要创建的自定义阴影图像
如图所示,自定义背景图像也必须设置为
setBackgroundImage:forBarMetrics:method。如果默认背景
如果使用“图像”,则不管如何都将使用默认的阴影图像
该属性的值
因此,要使用nil UIImage hack,您还必须设置自定义导航栏背景图像。这也可能是一个零图像,这会产生一个漂亮的平坦、干净的“地铁”风格导航栏:
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
因为self.navigationController.navigationBar.shadowImage=[[UIImage alloc]init]代码>不工作,我找到了一种简单可行的方法来消除iOS 6和iOS 5中
UINavigationBar
的阴影。希望有需要的人能看到这个帖子
您只需准备一张背景图像,其高度比导航栏高度大1个像素(例如,默认UINavigationBar为320×45,当然是2x为640×90)
然后只需使用[[UINavigationBar外观]setBackgroundImage:…]
,您将发现阴影被1个像素所取代。干杯
顺便说一句,我发现Twitter也做了同样的事情,如果你解压缩Twitter.ipa,查看一下bg\u nav\u bar\u events\u dark.png,大小是320×47。他们自己制作了3像素的阴影:)我在试图让导航条在iOS6和iOS7之间看起来一样时遇到了这个问题 我发现有效的答案就是使用:
NSMutableDictionary *titleBarAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] titleTextAttributes]];
[titleBarAttributes setValue:[NSNumber numberWithInt:0] forKey:UITextAttributeTextShadowOffset];
[[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes];
ie:将阴影偏移设置为零。另一种方法如何:
UINavigationBar.appearance().barStyle=.Black
对于黑暗的导航栏,iOS不显示阴影。在Swift 3.0中,看起来是这样的
UINavigationBar.appearance().shadowImage = UIImage ()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
iOS 6是测试版的预发布软件,我很确定它现在在NDA下。我会删除这个问题以避免得到所有NDA评论,并将其发布在苹果为预发布软件提供的开发论坛上。查看UI自定义会话视频againDavid是正确的-UI自定义视频涵盖了这一主题。这解决了问题,但会导致任何“突出显示触摸”(白光)的UIBarButtonims在点击时呈现错误。有一个更好的答案涉及图像文件,但这说明的太多了。那是什么属性,层?除了在旋转过程中,当阴影返回时,这是有效的。上面Dima Korbin的答案似乎是最完整的解决方案。在iOS 7上,这也隐藏了状态栏:(很好,我在iOS 6应用程序上的其他答案也适用于iOS 7:)记住,这只适用于iOS 6。从UINavigationBar.h:/*默认值为零。非nil时,显示自定义阴影图像,而不是默认阴影图像…*/@属性(非原子,保留)UIImage*阴影图像NS\u可用\u IOS(6\u 0)UI\u外观\u选择器;注意:要显示自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。如果使用默认背景图像,则无论此属性的值如何,都将使用默认阴影图像。这是正确答案<代码>self.navigationBar.shadowImage=nil代码>的效果与答案中描述的技术不同。您可能希望向[[UIImage alloc]init]@BasHoltrop自动释放添加自动释放?中世纪已经过去了>=iOS7的完整解决方案是--
[[UINavigationBar
UINavigationBar.appearance().shadowImage = UIImage ()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)