从 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 的标题,不是当前标签页的标题

  • 下一页动画不如默认流畅