在 NativeScript TabView 中隐藏选项卡按钮
Hide Tab Buttons in NativeScript TabView
我将 Nativescript 与 Typescript/Angular 一起使用,并且对于 iOS 和 Android,我想完全隐藏导航选项卡按钮而不丢失选项卡。
换句话说:我想要选项卡内容,而不是按钮。
我愿意接受其他建议,以获得没有选项卡导航菜单的相同功能。
我能找到的最接近的答案是:
NativeScript How to hide tab buttons from TabView
但是,这个答案没有用。它导致整个页面变白并出现 none 个选项卡项目。似乎滑动功能也停止工作了。
有什么想法吗?
这是在 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>
最好的方法是以编程方式进行。在 https://github.com/NativeScript/nativescript-angular/issues/621 上查看此问题。
只需以编程方式创建选项卡,然后您就可以控制它们。一旦选项卡从 UI.
添加到树中,您就无法从层次结构中删除选项卡
我遇到了同样的问题,并找到了至少适用于 android 的解决方案,也许有人可以提供 iOS 解决方案。您需要注释 TabView,以便您可以访问底层 Android 组件,就像我对 #mainTabView
所做的那样
<TabView #mainTabView androidTabsPosition="bottom">
<GridLayout *tabItem="{iconSource: 'res://ur_news', title: 'Home'}">
<Label text="Tab 1"></Label>
</GridLayout>
[...]
</TabView>
然后,在组件中您可以引用此元素,访问内部 tabView 并使用 android 本机调用来隐藏它。
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);
}
}
老问题,但也许其他人也提出了这个问题,所以给出了更新的答案。
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>
我将 Nativescript 与 Typescript/Angular 一起使用,并且对于 iOS 和 Android,我想完全隐藏导航选项卡按钮而不丢失选项卡。
换句话说:我想要选项卡内容,而不是按钮。
我愿意接受其他建议,以获得没有选项卡导航菜单的相同功能。
我能找到的最接近的答案是: NativeScript How to hide tab buttons from TabView
但是,这个答案没有用。它导致整个页面变白并出现 none 个选项卡项目。似乎滑动功能也停止工作了。
有什么想法吗?
这是在 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>
最好的方法是以编程方式进行。在 https://github.com/NativeScript/nativescript-angular/issues/621 上查看此问题。
只需以编程方式创建选项卡,然后您就可以控制它们。一旦选项卡从 UI.
添加到树中,您就无法从层次结构中删除选项卡我遇到了同样的问题,并找到了至少适用于 android 的解决方案,也许有人可以提供 iOS 解决方案。您需要注释 TabView,以便您可以访问底层 Android 组件,就像我对 #mainTabView
所做的那样<TabView #mainTabView androidTabsPosition="bottom">
<GridLayout *tabItem="{iconSource: 'res://ur_news', title: 'Home'}">
<Label text="Tab 1"></Label>
</GridLayout>
[...]
</TabView>
然后,在组件中您可以引用此元素,访问内部 tabView 并使用 android 本机调用来隐藏它。
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);
}
}
老问题,但也许其他人也提出了这个问题,所以给出了更新的答案。
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>