从tabbedpage删除Tabbar留有空白。如何删除它?

时间:2019-05-21 10:50:15

标签: xamarin.forms xamarin.ios uitabbar

我想从Tabbar中删除TabbedPage。我可以使用它,但是隐藏Tabbar后,它留有空白空间或页面高度没有更新。

请注意,当我们在页面上滑动时,空格消失了,再也不会回来。此问题仅是第一次出现。

我已经尝试过this链接。但这不起作用。

也尝试关注

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); 

还有没有办法第一次删除空白?

2 个答案:

答案 0 :(得分:0)

在渲染器中添加以下功能可消除TabbedPage中的空白。

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;
}

答案 1 :(得分:0)

有一种不需要任何渲染的解决方案,并且可以在Android和iOS上使用。

TabbedPage包裹在NavigationPage中,这样您的应用程序的结构就会变得

  • NavigationPage(根)
    • 已点击页面
      • 导航页面
        • ContentPage(带有标签栏)
    • ContentPage(无标签栏)

在TabbedPage上,您必须隐藏“根”导航页的导航栏,否则,您将有2个导航栏。

<TabbedPage
    ...
    HasNavigationBar="False"> 

如果您使用'root'NavigationPage推送页面,则标签栏将被隐藏,并且底部没有空格。

--- 编辑 ---

在以下位置查看我的示例: https://github.com/Jfcobuss/HideTabbarExample/tree/master/HideTabbarExample

该解决方案的缺点是

  • 有点棘手的解决方法

  • 后退按钮旁边的标题是TabbedPage的标题,而不是当前选项卡

  • 下一页的动画效果不如默认值