Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove UINavigationBar and UISearchBar hairline

I am creating an iOS 7 app in which I'd like to have a SearchBar right bellow the NavigationBar, and I wanted them both to look like a single piece. Therefore I need to tint them with the same color (done already) and remove that hairline at the bottom of the NavigationBar and at the top of the SearchBar. How can I achieve that?

like image 823
Guilherme Avatar asked Nov 28 '22 05:11

Guilherme


2 Answers

Officially, this is only possible by setting the shadowImage of the navigationBar to an empty image. However, a closer look at the documentation, it is said:

For a custom shadow image to be shown, a custom background image must also be set with the setBackgroundImage:forBarMetrics: method. If the default background image is used, then the default shadow image will be used regardless of the value of this property.

By using a custom background image, you would lose the blurred background translucency.

If you feel adventurous, the "hairline" is a UIImageView that is a subview of the navigation bar. You can find it and set it as hidden. This is what Apple does in their native calendar app, for example. Remember to show it when the current view disappears.

like image 145
Léo Natan Avatar answered Dec 18 '22 01:12

Léo Natan


use following code in AppDelegate (didFinishLaunchingWithOptions)

Swift :

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

Objective c :

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

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
like image 22
Nitesh Avatar answered Dec 18 '22 01:12

Nitesh