iOS - second TableViewController under TabBarController is overlapped by NavigationBar - ios

I have the following storyboard layout:
NavigationController
'-> View Controller
'-> TabViewController
'-> TableViewController1
'-> TableViewController2
The problem is when the second tab is selected, the table view (TableViewController2) appears overlapped by the top navigation bar, despite Under Top Bars being deselected under Extend Edges. The first tab works fine with the same setting.
If I swap the table view controllers between tabs, the problem doesn't swap, it still stays on tab 2.
Anyway to fix this?

I didn't quite get the question, but is Adjust Scroll View Insets checkbox of your view controller selected ?

Related

Put the Navbar fixed while move between tabs

I use the same NavBar in all the views of TabBar, right now I have an Initial TabBarController with five NavigationController and each one with its ViewController.
The thing is that when selecting any section in the TabBar the hole screen, including the NavBar, moves to the selected section.
I need the Navbar and Tabbar to be fixed and only the content in the middle to move when tap to go to some screen.
Hope the description of the problem is clear.
Any ideas what i can do to replicate that behavior?? Thanks!
The reason that is happening is because each tab/view has it's own NavigationController. Instead you need to share one NavigationController with all of the views so that the NavBar isn't a new one every single time
Navigation bar is a part of the navigation controller's view. If you have separate navigation controllers, you essentially have those many navigation bars.
If you just want a single navigation bar / controller and control the content with a bottom bar, you can simply use a toolbar / tabbar (without tabbarcontroller) at the bottom, to navigate / change content

How to segue to view controller without the tab bar disappearing from the main view

I need to segue to another UIViewController from my TabBarController without the tab bar disappearing from the bottom of the view.
As you can see in the picture, I want to segue to the colored view when pressing the red button from tab bar controller with the tab bar still displayed at the bottom of the view.
enter image description here
Set each of your tab roots to be a UINativagationController. Then set the current UIViewControllers as the roots of the navs. Then you can segue as much as you want and the tabbar will remain on the bottom.
e.g.
like the bottom flow, you can add another UIViewControllers to the right again.

UIView automatically moving up when pushed in a SplitviewController from TabbarController

My Single View Application has a TabBar & some Tab contains Splitview. My current scenario is when I pushed a new view controller in my Tab's secondary view controller, it moves up automatically & shows a black bar top of the TabBar. Please take a look at the screenshot below
Select the ViewController you worked on.
Go to the Attribute Inspector.
In Attribute Inspector View Controller section
Unmark Adjust Scroll View Insets (layout)
Checkmark Under Opaque Bars (Extend Edges)
Hope it helps.

How to contain UIViewController view between navigation bar and tab bar?

I have created a storyboard layout which contains UIViewControllers within UINavigationControllers which all connect back to a UITabBarController. There is a login page which is not connected to anything (just a UIViewController) which segues into the UITabBarController when the app detects user authentication. You can see what this looks like in the following image:
When I set the translucent property of the Navigation Bar to "false" or "No", the view y origin gets pushed down to the bottom of the Navigation Bar (which is the behavior that I am looking for). However, when I set the translucent property of the Tab Bar to "false" or "No", the Tab Bar DOES become opaque, but the view is not resized to fit between the top and bottom bars. I have unchecked the Extend Edges property for both Under Top Bars and Under Bottom Bars for all UIViewControllers, UINavigationControllers, and the UITabBarController.
When I add subviews programmatically (no auto-layout), the UIViewController's view is still the height of the entire screen, and is only pushed down from the top bar, but not pushed up from the bottom bar. While creating this question, this is the result I got on the simulator (subviews are not even starting below the Navigation Bar):
The layout that I'm trying to achieve is to have the view fit between the Navigation Bar and the Tab Bar so that both bars are opaque and no content goes underneath them. Any ideas or suggestions?
EDIT:
After eliminating individual Navigation Controllers and adding a single one before the TabBar Controller, I'm getting weird behavior including navigation items disappearing and one of my subviews still goes under bottom bar.
EDIT 2:
After doing some research, It seems that having navigation controllers inside each tab is a normal view hierarchy. Unfortunately, I still have not figured out how to limit a view controller's view to be between a navigation bar and a tab bar. Any suggestions?

In a container view, a navigation controller's navigation bar not resizing to include status bar

I have created an application which needs to have a bar above the navigation bar and other views. To accomplish this, I am using a view controller with a view for the top bar, and then a container view for everything else. Sometimes, the top bar needs to be hidden. I'm using autolayout to hide the top bar (set its height to 0), and the container view expands to fill the screen (container top equal to the top bar bottom). The container view contains a navigation controller because I need a navigation bar below the top bar sometimes. When I start the app, this all works fine as shown below:
As you can see, the navigation bar stays the desired height, which is expanded to include the status bar
However, when the top bar is tapped, I use a segue to present (not push) a view controller from my root view controller (not the container), and then I look at the same screen with the navigation bar, the navigation bar is no longer extended and it overlaps the status bar as seen below:
Why would presenting a view controller break this? And then how could I rectify this or prevent it?
One possible solution I could do is present a view controller from within the container view, that works, I would just have to set the current view controller in the container to a delegate of the root controller, so that when the top bar is tapped, it tells the view controller in the container to present the new view controller. This would not be my first option however, especially if there are other scenarios which cause this problem.
Thanks for any help!
You need to turn automaticallyAdjustsScrollViewInsets off for all of your child view controllers and manage the insets (or setup so they aren't required) yourself. By default automaticallyAdjustsScrollViewInsets is on for all view controllers (which is what you want for 'full screen' presented VCs.
At the moment you see controllers almost randomly updating to reorganise themselves for the scroll insets as the VC hierarchy changes.
I'd probably turn automaticallyAdjustsScrollViewInsets off for all VCs (apart from root) and change your header view so that it's full height or status bar height (which should be the length of the topLayoutGuide of the root VC). When collapsed to status bar height your header view could also change colour to match that of the current top VC.

Resources