如何删除UINavigationBar和UISearchBar发际线

时间:2013-09-26 19:54:27

标签: uinavigationbar ios7 uisearchbar

我正在创建一个iOS 7应用程序,我希望在NavigationBar下面有一个SearchBar,我希望它们看起来像一个单件。因此,我需要使用相同的颜色(已经完成)对它们进行着色并删除NavigationBar底部和SearchBar顶部的发际线。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:13)

官方说明,只有将navigationBar的shadowImage设置为空图像才能实现。但是,仔细看一下文档,就说:

  

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

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

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

答案 1 :(得分:7)

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

  斯威夫特:

UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .any, barMetrics: .default) 
UINavigationBar.appearance().shadowImage = UIImage() 
  

目标c:

    [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init]
                                  forBarPosition:UIBarPositionAny
                                      barMetrics:UIBarMetricsDefault];

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];

答案 2 :(得分:6)

斯威夫特3:

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

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:2)

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