0

我有一个设置对话框,我想全屏显示并覆盖屏幕底部的标签栏。我使用了这个 SO 答案并添加HidesBottomBarWhenPushed到我的视图控制器中,它确实隐藏了标签栏。不幸的是,它留下了由子类显示的小三角形指示器子视图UITabBarController

在此处输入图像描述

我假设我可以订阅某种形式的通知以隐藏指示器,但我不知道那是什么。这里有一点帮助吗?

4

2 回答 2

1

当您使用此处描述的方法将栏设置为隐藏时,也许您可​​以发布 NSNotification ? 无法从 ImageView 访问 TabBarController

于 2012-11-27T22:44:08.970 回答
0

我将自己回答这个问题,因为我认为值得记录以供将来参考。我有一个SettingsDialogViewController我在我的ViewDidLoad()方法中连接HomeDialogViewController

NavigationItem.LeftBarButtonItem = new UIBarButtonItem("Settings", UIBarButtonItemStyle.Plain, (e, sender) => {
    ActivateController (_settingsDvc());
});

SettingsDialogViewControllerHidesBottomBarWhenPushed = true. 因此,当激活设置对话框时,底部栏被隐藏,这会导致调用ViewWillLayoutSubviews()方法。CustomTabBarController通过覆盖该方法,我可以根据可见视图控制器(例如SettingsDialogViewController)在按下时是否隐藏底栏来设置指示器的可见性。当那个视图控制器被弹出时,指示器会自动重新出现。

public override void ViewWillLayoutSubviews () {
    base.ViewWillLayoutSubviews ();
    var selectedVc = SelectedViewController as UINavigationController;
    indicator.Hidden = selectedVc != null && selectedVc.VisibleViewController.HidesBottomBarWhenPushed;
}

最后一点,我发现激活新设置视图时出现的动画会在状态栏下方的屏幕上显示一条黑带。我通过AutoResizingMask在“来自”视图控制器中设置来解决这个问题。

public override void ViewDidLoad () {
    base.ViewDidLoad ();
    NavigationItem.LeftBarButtonItem = new UIBarButtonItem("Settings", UIBarButtonItemStyle.Plain, (e, sender) => {
        ActivateController (_settingsDvc());
    });
    View.AutoresizingMask = UIViewAutoresizing.FlexibleHeight;
}
于 2012-11-28T17:24:33.163 回答