如何去除UINavigationBar和UISearchBar发际线

如何去除UINavigationBar和UISearchBar发际线,uinavigationbar,ios7,uisearchbar,Uinavigationbar,Ios7,Uisearchbar,我正在创建一个iOS 7应用程序,我希望在导航栏下面有一个搜索栏,我希望它们看起来像一个整体。因此,我需要用相同的颜色对它们着色(已经完成),并删除导航栏底部和搜索栏顶部的发际线。如何实现这一点?正式来说,只有将导航栏的阴影图像设置为空图像,才能实现这一点。然而,仔细看一下文件,据说: 要显示自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。如果使用默认背景图像,则无论此属性的值如何,都将使用默认阴影图像 通过使用自定义背景图像,

我正在创建一个iOS 7应用程序,我希望在导航栏下面有一个搜索栏,我希望它们看起来像一个整体。因此,我需要用相同的颜色对它们着色(已经完成),并删除导航栏底部和搜索栏顶部的发际线。如何实现这一点?

正式来说,只有将导航栏的
阴影图像设置为空图像,才能实现这一点。然而,仔细看一下文件,据说:

要显示自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。如果使用默认背景图像,则无论此属性的值如何,都将使用默认阴影图像

通过使用自定义背景图像,您将失去模糊的背景半透明性


如果您喜欢冒险,“发际线”是一个UIImageView,它是导航栏的子视图。您可以找到它并将其设置为隐藏。例如,这就是苹果在其原生日历应用程序中所做的。记住在当前视图消失时显示它。

正式地说,这只能通过将导航栏的
阴影图像设置为空图像来实现。然而,仔细看一下文件,据说:

要显示自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。如果使用默认背景图像,则无论此属性的值如何,都将使用默认阴影图像

通过使用自定义背景图像,您将失去模糊的背景半透明性


如果您喜欢冒险,“发际线”是一个UIImageView,它是导航栏的子视图。您可以找到它并将其设置为隐藏。例如,这就是苹果在其原生日历应用程序中所做的。记得在当前视图消失时显示它。

对于那些对如何实现@Leo Natan的“冒险”方法感兴趣的人,我添加了示例代码。

对于那些对如何实现@Leo Natan的“冒险”方法感兴趣的人,我在中添加了示例代码。

删除UISearchBar顶部和底部发际线的一种方法是将背景图像替换为没有薄边框的可拉伸图像。只需使用您选择的颜色制作一个方形png,然后:

[searchBar setBackgroundImage:[[UIImage imageNamed:@"SearchBarImage"] resizableImageWithCapInsets:UIEdgeInsetsMake( 10, 10, 10, 10)]];

由于背景是实心的,您可以为插图使用几乎任何您想要的值。

删除UI搜索栏顶部和底部发际线的一种方法是将背景图像替换为可拉伸的图像,该图像没有薄边框。只需使用您选择的颜色制作一个方形png,然后:

[searchBar setBackgroundImage:[[UIImage imageNamed:@"SearchBarImage"] resizableImageWithCapInsets:UIEdgeInsetsMake( 10, 10, 10, 10)]];

由于背景坚实,您几乎可以为插图使用任何您想要的值。

在AppDelegate(didFinishLaunchingWithOptions)中使用以下代码

斯威夫特:

目标c:


在AppDelegate中使用以下代码(didFinishLaunchingWithOptions)

斯威夫特:

目标c:

Swift 3:

self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
Swift 3:

self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")


我将使用背景图像,但导航栏将是不透明的,因此在这种情况下,模糊效果的丢失不会影响我。另一个问题是:如何知道要隐藏哪个子视图,因为它包含多个UIImageView?如果使用自定义背景图像,则不应触摸视图层次结构。您可以使用空的
阴影图像
。我想我把所有的图像视图都隐藏在我的箱子里了。我无法让它工作。我尝试将shadowImage设置为一个透明的1x1 png文件,该文件的颜色与导航栏的颜色相同,
[UIImage new]
,甚至
nil
,但都不起作用。请尝试使用外观方法。加载应用程序时,但在加载视图控制器之前,
[[UINavigationBar外观]设置ShadowImage:[UIImage new]]我只需使用背景图像即可删除搜索栏。我将使用背景图像,但导航栏将是不透明的,因此在这种情况下,模糊效果的丢失不会影响我。另一个问题是:如何知道要隐藏哪个子视图,因为它包含多个UIImageView?如果使用自定义背景图像,则不应触摸视图层次结构。您可以使用空的
阴影图像
。我想我把所有的图像视图都隐藏在我的箱子里了。我无法让它工作。我尝试将shadowImage设置为一个透明的1x1 png文件,该文件的颜色与导航栏的颜色相同,
[UIImage new]
,甚至
nil
,但都不起作用。请尝试使用外观方法。加载应用程序时,但在加载视图控制器之前,
[[UINavigationBar外观]设置ShadowImage:[UIImage new]]我只需使用背景图像即可删除搜索栏。为了避免在搜索过程中出现外观错误,我将插入设置为0,0,0,0。它仍然工作得很好,我在点击搜索字段时没有遇到图形损坏。为了避免在搜索过程中出现外观错误,我将插入设置为0,0,0,0。它仍然工作得很好,我在点击搜索字段时没有遇到图形损坏。为什么我们必须将字符串设置为参数??,这没有意义,可以更好地设置枚举。搜索并尝试了许多不同的解决方案。这是唯一一个使用UISearchController.Objective-C:[self.navigationController.navigationBar setValue:@(是)forKeyPath:@“hidesShadow”];为什么我们必须设置一个字符串作为参数??,这没有意义,可以更好地设置一个枚举。搜索并尝试了许多不同的解决方案。这是唯一一个使用UISearchController.Objective-C:[self.navigationController.navigationBar setValue:@(是)forKeyPath:@“hidesShadow”];法罗群岛