Brian Halpin
Brian Halpin

Reputation: 179

Change appearance of UINavigationBar from solid to transparent

I want to achieve the exact same effect as the Photos app on the iPad: solid black navigation bar during the gallery controller, then transparent when viewing a photo.

After I initialize my navigation controller in the AppDelegate I can change the style using the below code, but not outside the AppDelegate. However once the navigation controller is on screen and set once, navigationBar becomes a read-only property.

I would greatly appreciate if someone can share how this is done. Thanks.

    self.navigationController.navigationBar.tintColor = [UIColor clearColor];
    self.navigationController.navigationBar.translucent = YES;
    self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

Upvotes: 1

Views: 969

Answers (2)

Nayan Sharma
Nayan Sharma

Reputation: 41

Seems like you want to display navigationBar at the Gallery so there no need to change anything but after selecting a photo, keep the NavigationBar hidden in the PhotoViewController.

-(void) viewDidLoad
 {
  self.navigationController.navigationBar.barStyle=UIBarStyleBlackTranslucent;
  self.navigationController.navigationBar.hidden = NO;
 }

and in ViewWillAppear

-(void) viewWillAppear 
 {
  self.navigationController.navigationBar.hidden = YES;
 }

And then create a custom method implementing UITapGestureRecognizer where on a single tap display the navigationBar by setting hidden property to YES.

Upvotes: 1

Abid Hussain
Abid Hussain

Reputation: 1549

UINavigationBar in UIBarStyleBlackTranslucent barStyle doesn't fix it's place as it normally does in other styles. In UIBarStyleBlackTranslucent style it just overlaps on your view and contents of views are translated up and view height is also increased.

if you're showing photos then first hide your navigationBar :

[[self navigationController] setNavigationBarHidden:YES animated:NO];

Now set your navBar's style to UIBarStyleBlackTranslucent

[self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

Then show your imageview (or scrollview with picture- depends on your logic). Then on tapping on your imageview you can show and hide bar)

 // Show/Hide bar
 // Let say you've a bool 'shown' for current status of navbar's visibility.
if (!shown) {
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}else{
     [[self navigationController] setNavigationBarHidden:NO animated:YES];
}
shown = !shown;

Hope this'll do it. ANd never forget to rechnage barStyle to UIBarStyleBlackOpaque once you exit gallery.

Upvotes: 1

Related Questions