隐藏NativeScript TabView中的选项卡按钮

时间:2018-04-14 14:31:06

标签: tabs nativescript angular2-nativescript

我正在使用带有Typescript / Angular的Nativescript,对于iOS和Android,我想完全隐藏导航标签按钮,而不会丢失标签之间的滑动功能。

另一种说法:我想要标签内容,而不是按钮。

我愿意接受其他建议,以便在没有标签导航菜单的情况下获得相同的功能。

我能找到的最接近的答案是: NativeScript How to hide tab buttons from TabView

但是,这个答案没有用。它导致整个页面变为白色,并且没有出现任何标签项。似乎滑动功能也不再起作用。

有什么想法吗?

这是在html(不是xml)文件中:

<TabView id="mainTab" selectedIndex="1">
    <StackLayout *tabItem="{ title: 'Tab 1' }">
        <app-page-one></app-page-one>
    </StackLayout>
    <StackLayout *tabItem="{ title: 'Tab 2' }">
        <app-page-two></app-page-two>
    </StackLayout>
    <StackLayout *tabItem="{ title: 'Tab 3' }">
        <app-page-three></app-page-three>
    </StackLayout>
</TabView>

Example page with the tabs I want to hide

3 个答案:

答案 0 :(得分:1)

最好的方法是以编程方式执行此操作。请在https://github.com/NativeScript/nativescript-angular/issues/621处查看此问题。

只需以编程方式创建标签,然后即可控制它们。从UI中添加到树中后,无法从层次结构中删除选项卡。

答案 1 :(得分:1)

我遇到了同样的问题,并找到了至少可以在android上运行的解决方案,也许有人可以提供iOS解决方案。您需要注释TabView,以便可以像使用#mainTabView

一样访问基础的Android组件。
<TabView #mainTabView androidTabsPosition="bottom">
  <GridLayout *tabItem="{iconSource: 'res://ur_news', title: 'Home'}">
    <Label text="Tab 1"></Label>
  </GridLayout>
  [...]
</TabView>

然后,您可以在组件中引用此元素,访问内部的tabView并使用android native调用将其隐藏。

import { Component, ElementRef } from '@angular/core';

[...]

// angular will inject a reference to the native implementation here, we can use it
@ViewChild('mainTabView') containerRef: ElementRef;

[...]

protected handleAndroidFullscreenMode(isFullscreen: boolean): void {
  // wait a little bit until calling this - if it is empty it might not yet be there
  // fetch the underlying nativeElement 
  const tabView = this.containerRef.nativeElement as TabView;
  if(!tabView) {
    console.log("native element not yet initialized");
    return;
  }

  // the tabLayout contains the buttons we want to hide
  const tabLayout = tabView.nativeView.tabLayout;
  if(!tabLayout) {
    console.log("No tab layout");
    return;
  }

  // use native android methods to hide them
  if(isFullscreen) {
    tabLayout.setVisibility(android.view.View.GONE);
  } else {
    tabLayout.setVisibility(android.view.View.VISIBLE);
  }
}

答案 2 :(得分:1)

古老的问题,但也许还有其他人也提出来,所以给出了更多更新的答案。

Nativescript v6引入了Tabs(和BottomNavigation),目的是替换TabView:https://nativescript.org/blog/tabs-and-bottomnavigation-nativescripts-two-new-components/

因此,使用Tabs的解决方案只是删除TabStrip部分,例如

<Tabs>
  <TabContentItem>
      <GridLayout>
          <Label text="Content for Tab 1" />
      </GridLayout>
  </TabContentItem>
  <TabContentItem>
      <GridLayout>
          <Label text="Content for Tab 2" />
      </GridLayout>
  </TabContentItem>
</Tabs>