在iOS 11之前,我在TabPage的自定义渲染器中使用此代码,以有条件地隐藏我的应用程序中的TabBar:
private void ToggleTabs(object sender, bool hideTabs)
{
TabBar.Hidden = hideTabs;
TabBar.Frame = TabBar.Hidden
? new CGRect(TabBar.Frame.X, TabBar.Frame.Y, TabBar.Frame.Width, 0)
: new CGRect(TabBar.Frame.X, TabBar.Frame.Y, TabBar.Frame.Width, tabBarHeight);
}
在构建TabBar时计算tabBarHeight
(根据文档,它应该总是49,但我讨厌幻数)。
我现在遇到的问题是,即使我正在折叠框架,仍然有一个白色矩形留在标签栏曾经的位置。我只注意到从XCode 9部署的运行iOS 11的设备上的这种行为。
我发现了一些我认为可能导致问题的SafeAreaInsets信息,但是除非我在iPhone X上运行,否则总会返回0,所以这似乎已经破灭了。
看起来iOS 11 SDK可能是罪魁祸首,但我无法弄清楚这些工作。
答案 0 :(得分:0)
这对我有用:
TabBar.Hidden = tabBarHidden;
// The solution to the space left behind the invisible tab bar
if (tabBarHidden)
{
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y,
View.Subviews[1].Frame.Width, 0);
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);
}
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);
}
答案 1 :(得分:0)
当手机旋转时,不得不加一点调整,视图再次爆发,因此旋转发生时也会调用此代码。视图高度的小摆动似乎把它排除在外......非常黑客但3-4个小时后,我接受了黑客并继续前进!
if (RootTabPage._fullScreen)
{
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y,
View.Subviews[1].Frame.Width, 0);
if( View.Frame.Height == View.Subviews[0].Frame.Height )
View.Subviews[0].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
View.Subviews[0].Frame.Width, View.Frame.Height + 2 );
else
View.Subviews[0].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
View.Subviews[0].Frame.Width, View.Frame.Height + 3 );
}
else
{
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y,
View.Subviews[1].Frame.Width, th);
View.Subviews[0].Frame = new CoreGraphics.CGRect(View.Subviews[0].Frame.X, View.Subviews[0].Frame.Y,
View.Subviews[0].Frame.Width, View.Frame.Height );
}