Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the best way to hide a tab in a TabNavigator?

I'd like to conditionally hide a tab in a TabNavigator. It seems that setting visible doesn't work properly (presumably because this is how the TabNavigator hides the tabs that aren't currently selected).

What's the right way to do this?

like image 255
Scotty Allen Avatar asked May 06 '09 18:05

Scotty Allen


People also ask

How do I hide the tab bar in Swift?

hidesBottomBarWhenPushed = true should do the work. DO NOT manually show and hide the tabbar.

How do I disable a tab in react native?

Disabled tab A tab can be disabled by setting the disabled prop.

How do I hide a tab in navigation?

Press ⇧⌘A (macOS), or Ctrl+Shift+A (Windows/Linux), for the Find Actions dialog. From here you can search for Tab Placement, NBar and TBar to turn on or off the tabs, Navigation Bar and Toolbar windows.


3 Answers

You can do this by making use of TabNavigator's getTabAt() method which returns the Button that makes up the visual tab. You can then set that Button's visible property. It's a little tricky to get this setup with a bindings, but it's doable.

You could also consider just disabling the tab instead, which you can do by setting enabled on the corresponding TabNavigator child (for which visible didn't work).

like image 191
Stiggler Avatar answered Oct 30 '22 10:10

Stiggler


What do you mean by hide? If you actually mean remove, then just take your array that's bound to the data in the TabNavigator, and remove the applicable element from it.

If you want to just have them removed temporarily, create a component of your own that encapsulates the TabNavigator and has an array of removed tabs and an array of actual tabs. Then handle this as you see fit.

like image 31
Zack Marrapese Avatar answered Oct 30 '22 12:10

Zack Marrapese


You might want to check out the flexlib project. They have a component called SuperTabNavigator that adds a lot of functionality to the base Flex TabNavigator, including hiding tabs (I think).

If you do have to create your own component, though, it's a bit more tricky. The thing to know is that "tabs" are actually specially styled buttons, contained within a TabBar component (the TabBar is then contained within the TabNavigator). What you'll have to do then, is subclass TabNavigator and have some property on your views (i.e. the canvases, etc. that are added to the TabNavigator) that is bound to the visible and includeInLayout properties of the TabBar buttons.

In essence, what you'll have is something like:

BindingUtils.bindProperty( tabButton, "visible", view, "someProperty" );
BindingUtils.bindProperty( tabButton, "includeInLayout", view, "someProperty" );
like image 1
Dan Avatar answered Oct 30 '22 11:10

Dan