我想从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);
还有没有办法第一次删除空白?
答案 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
中,这样您的应用程序的结构就会变得
在TabbedPage上,您必须隐藏“根”导航页的导航栏,否则,您将有2个导航栏。
<TabbedPage
...
HasNavigationBar="False">
如果您使用'root'NavigationPage
推送页面,则标签栏将被隐藏,并且底部没有空格。
--- 编辑 ---
在以下位置查看我的示例: https://github.com/Jfcobuss/HideTabbarExample/tree/master/HideTabbarExample
该解决方案的缺点是
有点棘手的解决方法
后退按钮旁边的标题是TabbedPage的标题,而不是当前选项卡
下一页的动画效果不如默认值