标签栏在iOS11 iPad上不使用全宽

时间:2018-05-25 14:52:09

标签: ios ipad uitabbarcontroller ios11

我以相对简单的方式使用UITabbarViewController。我的问题出现在iOS11版本的iPad设备上。它在iOS10或iPhone上不可见。

enter image description here

如果查看屏幕截图,可以看到标签的背景颜色未对齐。实际上,它是对齐的,它是tabbar本身没有占据整个宽度。因此,背景颜色与中央按钮重叠,因为它不使用最左侧和最右侧的空间。

我假设标签栏已损坏(而不是我的背景颜色,这是手动绘制的),因为外部标签的边缘不可点击,但项目定位设置为填充宽度屏幕:

TabBar.ItemPositioning = UITabBarItemPositioning.Fill;

如果您认为标签栏是全屏的,则项目大小是错误的,但如果您考虑"减少"版。所以我非常确定它在那里都很好,只要标签栏决定占据屏幕的整个宽度,按钮和背景颜色就会有正确的测量结果。

我尝试使用View.LayoutIfNeeded()SetNeedsLayout()来强制重绘,但无济于事。

我不确定为什么它甚至表现得如此,而且因为它是操作系统的默认行为而且我没有做任何特别的事情,我就是这样。不确定什么甚至可以尝试。

以下是一些相关代码:

MainTabbarController tabController = (MainTabbarController)Window.RootViewController;



public override void ViewDidLayoutSubviews()
{
    base.ViewDidLayoutSubviews();
    ConfigureTabbar();
}


public override void ViewDidLoad()
{
    base.ViewDidLoad();

    UIViewController[] tabs = //Create the VCs in the most basic way

    SetViewControllers(tabs, false);
}

protected virtual void ConfigureTabbar()
{
    TabBar.Translucent = false;
    TabBar.ItemPositioning = UITabBarItemPositioning.Fill;
    TabBar.ItemSpacing = 0;

    //View.LayoutIfNeeded();
    float tabbarItemWidth = (float)Math.Ceiling(View.Bounds.Width / TabBar.Items.Length) + 1; //+ 1 to avoid the right pixel that was not filled on the right tab. Strange behaviour...
    TabBar.ItemWidth = tabbarItemWidth;
    //var version = NSProcessInfo.ProcessInfo.OperatingSystemVersion;
    NSOperatingSystemVersion ios11 = new NSOperatingSystemVersion(11, 0, 0);

    if (NSProcessInfo.ProcessInfo.IsOperatingSystemAtLeastVersion(ios11))
    {
        if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad)
        {
            TabBar.SelectionIndicatorImage = _viewModel.Styles.Colors.ActiveTabColor.ToNative().ToImage(new CGRect(0, -View.SafeAreaInsets.Bottom, tabbarItemWidth, TabBar.Frame.Height));
        }
        else
        {
            TabBar.SelectionIndicatorImage = _viewModel.Styles.Colors.ActiveTabColor.ToNative().ToImage(new CGRect(0, -View.SafeAreaInsets.Bottom, tabbarItemWidth, TabBar.Frame.Height));
        }
    } 
    else 
    {
       TabBar.SelectionIndicatorImage = _viewModel.Styles.Colors.ActiveTabColor.ToNative().ToImage(new CGSize(tabbarItemWidth, TabBar.Frame.Height));
    }


    UITextAttributes attrs = new UITextAttributes();
    attrs.Font = _viewModel.Styles.Fonts.ExtraSmall.ToNative();
    attrs.TextColor = _viewModel.Styles.Colors.ActionText.ToNative();

    UITabBarItem.Appearance.SetTitleTextAttributes(attrs, UIControlState.Normal);

    for (int i = 0; i < TabBar.Items.Length; i++)
    {
        UITabBarItem item = TabBar.Items[i];
        item.Title = _viewModel.Titles[i];
        item.TitlePositionAdjustment = new UIOffset(0, -4);
        item.ImageInsets = new UIEdgeInsets(-2, 0, 2, 0);
    }

    //View.LayoutIfNeeded();
}

0 个答案:

没有答案