How to prevent UINavigationBar from covering top of view in iOS 7?

edgesforextendedlayout
how to stop your view going under the navigation bar using edgesforextendedlayout
uitableview under navigation bar
navigation bar overlaps view swift
uitableview under status bar
ios 13 navigation bar issue
ios collapsing navigation bar
uiscrollview under navigation bar

After updating to Xcode 5, the navigation bars in all of my app's views have shifted down. Here are some screenshots, the first showing everything in the view as it's pulled down, and the second showing all of it untouched. The search bar should begin where the navigation bar.

Anyone know how I can fix this?

edit: i have tried this previously recommendation:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

But it yields very odd results.

This may be because I have a "slide menu" under this view controller that is appearing due to the transparency of the navigation bar.

Set the navigation bar's translucent property to NO:

self.navigationController.navigationBar.translucent = NO;

This will fix the view from being framed underneath the navigation bar and status bar.

If you have to show and hide the navigation bar, then use

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific

in your viewDidLoad method.

How to prevent UINavigationBar from covering top of view in iOS 7 , After updating to Xcode 5, the navigation bars in all of my app's views have shifted down. Here are some screenshots, the first showing  Preventing the Status Bar from Covering Your Views Q: How do I prevent the status bar from covering my views in iOS 7? A: You need to use Auto Layout and apply a vertical spacing anchored to the "Top Layout Guide" of your view controller. Beginning with iOS 7 view controllers are displayed full screen, by default, as shown in Figure 1.

In iOS 7 by defaults all Controller translucent property value is YES, so you set translucent property NO for this issue.

self.navController.navigationBar.translucent = NO;

How to stop your view going under the navigation bar using , As of iOS 7.0, all views automatically go behind navigation bars, toolbars and tab bars to provide what Apple calls "context" – having some idea  As of iOS 7.0, all views automatically go behind navigation bars, toolbars and tab bars to provide what Apple calls "context" – having some idea of what's underneath the UI (albeit blurred out with a frosted glass effect) gives users an idea of what else is just off screen.

You can disable the "Extend edges" in Attribute inspector of View Controller of this screen (as shown in below image) :

Preventing the Status Bar from Covering Your Views, Q: How do I prevent the status bar from covering my views in iOS 7? a vertical spacing anchored to the "Top Layout Guide" of your view controller. opaque UINavigationController or UITabBarController automatically keep  With VoiceOver enabled on an iOS device, after the user navigates to a new view in the hierarchy, VoiceOver reads the navigation bar’s title, followed by the name of the left bar button item. When the user taps an element in a navigation bar, VoiceOver reads the name and the type of the element; for example, "General back button," "Keyboard

This works for swift as well on iOS 8.1

navigationController?.navigationBar.translucent = false

UINavigationController, The navigation controller manages the navigation bar at the top of the interface Because the content view underlaps the navigation bar in iOS 7 and later, you the view controllers in the navigation stack cover the entire navigation interface. anils Aug 24, 2017 7:20 AM ( in response to Marcel.Uniq ) It appears that UINavigationBar may have a custom implementation of addSubview or insertSubview that preserves it's desired view hierarchy and inserts your custom view at the end. There is a _UIBarBackground at index 0.

If you want to keep the translucency on your navigationBar, at the end of your viewDidLoad or in your viewWillAppear add this line of code:

[self.view sendSubviewToBack:self.tableView]

Somehow if your scrollView subclass (UITableView, UICollectionView, etc.) is at index 0 in your current view subviews, it will automatically adjust the insets according to your navigationBar. And it shouldn't affect your UI in versions prior to iOS7 either.

EDIT If you initialize your UITableView programmatically, then it is best to add it to the view using this [self.view insertSubview:self.tableView atIndex:0];

Extended Layout in iOS, pre-iOS 11 - Ryan Fox, A small dive into the extended layout introduced in iOS 7 and how it worked before iOS 11. these APIs work so we can start fixing things the correct way and stop perpetuating bad info. We'll cover those sometime in the near future. Our view starts at the top of the UINavigationController (well, its view). Coffee Shop Tutorial: Learn how to add a navigation bar (UINavigationBar) to your iOS project without a corresponding navigation controller (UINavigationController). Covers two methods: the first

iOS 7 Programming Tips: Customize Navigation Bar and Status Bar, Embed the view controller in a navigation controller. As you can see, the navigation bar in iOS 7 is by default intertwined with the status bar. To disable the translucent property, you can simply select the iOS 7. But as some of you have raised such question before, I decide to put the tip in this tutorial. See UINavigationBar changes in iOS13, Part2: UISearchController for more detail. Customization # So to customize your navigation bar what you need to do is create UINavigationBarAppearance and customize it how you want your bar to be and apply it to any of 3 navigation bar appearances.

Programming iOS 9: Dive Deep into Views, View Controllers, and , Another common interface is for the search bar to appear in a navigation bar at the top of You won't want the navigation bar to vanish when the user searches, so you'll set To prevent the presented search controller's view from covering the In iOS 7 and before, this was typically done by means of a popover (​Chapter  By default in iOS 7 the content extends to the top and bottom of the screen, underneath any navigation bars, tool bars, or tab bars. If you were to set the frame of the table view to be start after the navigation bar, the content of the table view would not scroll beneath the navigation bar providing the nice blur effect.

Mobile Safari (Whyyyy?!) - Engineering Blog, Why Would Webpack Stop Re-compiling? 6 Plus Safari · Stack Overflow – Overriding the Bottom and Top Touch Area on iOS7 that the JackThreads website forced the mobile Safari bottom navigation bar to always show. iOS 7 presents developers with new freedom to customize the appearance of navigation bar and status bar. If you’re porting the app from iOS 6 to iOS 7 or creating a brand-new app for iOS 7, I hope you’ll find these tips useful. For your complete reference, you can download the source code of the demo project from here. Just uncomment any

Comments
  • Here you are another solution for this issue. stackoverflow.com/a/51491645/10148333
  • I have placed this under viewDidLoad however it yields no changes.
  • make it in viewDidLayoutSubviews funtions
  • Appending this to viewDidLayoutSubviews did the trick. I appreciate the help gentlemen!
  • Hi, Any Question? or is it compliment?
  • self.edgesForExtendedLayout = UIRectEdgeNone; helped me
  • There is no "navController" property. Use this: self.navigationController.navigationBar.translucent = NO;
  • i create navigtionbarcontroller object in app delegate and give name navController.
  • This should be the correct answer. If you are adding the subview programmatically you can just do [self.view insertSubview:self.tableView atIndex:0]; instead of sending it to the back after you add it.
  • Correct. But without knowing how he's initiating his controller (programmatically, interface builder), we can't assume that it is the best solution. Although I've edited my answer.
  • This works but looks like a hack. Is there any notice in official documentation about this?
  • same here. none of the above seem to fix the problem.
  • I don't think this would affect the view at all.