Я использую UITabbarViewController
относительно простым способом.Моя проблема только появляется на устройствах iPad версии iOS11.Это не видно на iOS10 или iPhone.
Если вы посмотрите на скриншот, вы увидите, что цвет фона вкладки не выровнен.На самом деле, он выровнен, это сама панель вкладок, которая не занимает всю ширину.Таким образом, цвет фона накладывается на центральную кнопку, потому что он не использует пространство слева и справа.
Я предполагаю, что панель вкладок повреждена (а не цвета моего фона, которые нарисованы вручную), потому что края внешних вкладок не активируются, и, тем не менее, позиционирование элемента настроено так, чтобы заполнять ширинуэкрана:
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();
}