从 tabbedpage 中删除 Tabbar 留下空白 space。如何删除它?
Removing Tabbar from tabbedpage leaves blank space. How to remove it?
我想从 TabbedPage
中删除 Tabbar
。我让它工作但它留空 space 或隐藏后页面高度未更新 Tabbar
.
请注意,当我们轻扫页面时,空白会消失,再也不会回来。这个问题是第一次出现。
我已经从 this link 试过了。但是没用。
也尝试关注
private void Element_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
try
{
TabBar.Hidden = true;
//TabBar.Bounds = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
// View.Subviews[0].Frame.Width, 0);
if (TabBar.Hidden)
{
// page
View.Subviews[0].Frame = new CoreGraphics.CGRect(0, 0, View.Subviews[1].Frame.Width, NativeView.Frame.Height);
// Tabbar
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
View.Subviews[0].Frame.Width, 0);
}
else
{
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y,
View.Subviews[1].Frame.Width, 49);
View.Subviews[0].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
View.Subviews[0].Frame.Width, View.Subviews[0].Frame.Height - 49);
}
//if (TabBar.Hidden)
// View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y, View.Subviews[1].Frame.Width, 0);
//else
// View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y, View.Subviews[1].Frame.Width, 49);
}
catch (Exception ex)
{
//TraceLog("Element_PropertyChanged" + ex.Message);
}
}
编辑
我在单击列表视图项目时打开标签页。我允许动态添加多个选项卡。我还使用 ContentView 创建了自定义标签栏,当从 TabbedPage 添加或删除页面时我会更新它。
顺序是:
- 用户打开第一个选项卡。
- 单击选项卡页面上给出的主页图标。
- 通过点击另一个列表项打开第二页
- 滑动页面,页面高度正常
这是 ListView_ItemTapped 上的代码(没有发布它到底是怎么回事,但你可以了解 :))
MultiTab ObjMultiTab = new MultiTab(); // Initialize tabbed page
// Get data from server
ObjMultiTab.Data = ObjData;
int Id = Convert.ToInt32(ObjData.id);
if (ActiveList.ContainsKey(Id)) // Dictionary that contains info about index and pageid that are already open
{
TabId = ActiveList[ObjData.id];
CurrentPage = Children[TabId]; // If user taps on already opend page
}
else
{
Count += 1; ActiveList.Add(Id, Count);
Children.Add(new SecondTabbedPage(TableData)); // Or add new child
CurrentPage = Children[Count];
}
await Application.Current.MainPage.Navigation.PushModalAsync(ObjMultiTab);
有什么方法可以删除空白 space 也是第一次吗?
向渲染器添加以下函数从 TabbedPage
中删除了空白 space。
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
TabBar.Hidden = true;
var page = View.Subviews[0];
var tabbar = View.Subviews[1];
tabbar.Bounds = CGRect.Empty;
page.Bounds = UIScreen.MainScreen.Bounds;
}
有一个解决方案不需要任何渲染并且适用于 Android 和 iOS。
将 TabbedPage
包裹在 NavigationPage
中,这样您的应用程序结构就变成了
- 导航页面(根)
- 点击页面
- 导航页面
- ContentPage(带标签栏)
- ContentPage(没有标签栏)
在 TabbedPage 上,您必须隐藏 'root' NavigationPage 的导航栏,否则您有 2 个导航栏。
<TabbedPage
...
HasNavigationBar="False">
如果使用 'root' NavigationPage
推送页面,标签栏被隐藏并且底部没有空白 space。
--- 编辑 ---
查看我的示例:
https://github.com/Jfcobuss/HideTabbarExample/tree/master/HideTabbarExample
此解决方案的缺点是
这是一个有点棘手的解决方法
back-button 旁边的标题是 TabbedPage 的标题,不是当前标签页的标题
下一页动画不如默认流畅
我想从 TabbedPage
中删除 Tabbar
。我让它工作但它留空 space 或隐藏后页面高度未更新 Tabbar
.
请注意,当我们轻扫页面时,空白会消失,再也不会回来。这个问题是第一次出现。
我已经从 this link 试过了。但是没用。
也尝试关注
private void Element_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
try
{
TabBar.Hidden = true;
//TabBar.Bounds = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
// View.Subviews[0].Frame.Width, 0);
if (TabBar.Hidden)
{
// page
View.Subviews[0].Frame = new CoreGraphics.CGRect(0, 0, View.Subviews[1].Frame.Width, NativeView.Frame.Height);
// Tabbar
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
View.Subviews[0].Frame.Width, 0);
}
else
{
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y,
View.Subviews[1].Frame.Width, 49);
View.Subviews[0].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
View.Subviews[0].Frame.Width, View.Subviews[0].Frame.Height - 49);
}
//if (TabBar.Hidden)
// View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y, View.Subviews[1].Frame.Width, 0);
//else
// View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y, View.Subviews[1].Frame.Width, 49);
}
catch (Exception ex)
{
//TraceLog("Element_PropertyChanged" + ex.Message);
}
}
编辑
我在单击列表视图项目时打开标签页。我允许动态添加多个选项卡。我还使用 ContentView 创建了自定义标签栏,当从 TabbedPage 添加或删除页面时我会更新它。
顺序是: - 用户打开第一个选项卡。 - 单击选项卡页面上给出的主页图标。 - 通过点击另一个列表项打开第二页 - 滑动页面,页面高度正常
这是 ListView_ItemTapped 上的代码(没有发布它到底是怎么回事,但你可以了解 :))
MultiTab ObjMultiTab = new MultiTab(); // Initialize tabbed page
// Get data from server
ObjMultiTab.Data = ObjData;
int Id = Convert.ToInt32(ObjData.id);
if (ActiveList.ContainsKey(Id)) // Dictionary that contains info about index and pageid that are already open
{
TabId = ActiveList[ObjData.id];
CurrentPage = Children[TabId]; // If user taps on already opend page
}
else
{
Count += 1; ActiveList.Add(Id, Count);
Children.Add(new SecondTabbedPage(TableData)); // Or add new child
CurrentPage = Children[Count];
}
await Application.Current.MainPage.Navigation.PushModalAsync(ObjMultiTab);
有什么方法可以删除空白 space 也是第一次吗?
向渲染器添加以下函数从 TabbedPage
中删除了空白 space。
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
TabBar.Hidden = true;
var page = View.Subviews[0];
var tabbar = View.Subviews[1];
tabbar.Bounds = CGRect.Empty;
page.Bounds = UIScreen.MainScreen.Bounds;
}
有一个解决方案不需要任何渲染并且适用于 Android 和 iOS。
将 TabbedPage
包裹在 NavigationPage
中,这样您的应用程序结构就变成了
- 导航页面(根)
- 点击页面
- 导航页面
- ContentPage(带标签栏)
- 导航页面
- ContentPage(没有标签栏)
- 点击页面
在 TabbedPage 上,您必须隐藏 'root' NavigationPage 的导航栏,否则您有 2 个导航栏。
<TabbedPage
...
HasNavigationBar="False">
如果使用 'root' NavigationPage
推送页面,标签栏被隐藏并且底部没有空白 space。
--- 编辑 ---
查看我的示例: https://github.com/Jfcobuss/HideTabbarExample/tree/master/HideTabbarExample
此解决方案的缺点是
这是一个有点棘手的解决方法
back-button 旁边的标题是 TabbedPage 的标题,不是当前标签页的标题
下一页动画不如默认流畅