Xamarin.ios:搜索栏显示在每个选项卡栏视图中

Xamarin.ios:搜索栏显示在每个选项卡栏视图中,xamarin.ios,tabs,mvvmcross,searchbar,tabview,Xamarin.ios,Tabs,Mvvmcross,Searchbar,Tabview,我正在用Xamarin.iOS MvvmCross构建一个iOS应用程序。在这个应用程序中,我使用一个选项卡式视图。在一个选项卡视图上,我不想显示搜索栏,但此搜索栏显示在每个选项卡视图中。有人知道如何解决这个问题,以便我可以在其他选项卡视图中隐藏搜索栏吗 搜索栏选项卡视图: public override void ViewWillAppear(Boolean animated) { base.ViewWillAppear(animated); var s

我正在用Xamarin.iOS MvvmCross构建一个iOS应用程序。在这个应用程序中,我使用一个选项卡式视图。在一个选项卡视图上,我不想显示搜索栏,但此搜索栏显示在每个选项卡视图中。有人知道如何解决这个问题,以便我可以在其他选项卡视图中隐藏搜索栏吗

搜索栏选项卡视图:

public override void ViewWillAppear(Boolean animated)
    {
        base.ViewWillAppear(animated);
        var searchController = new UISearchController(searchResultsController: null);

        searchController.SearchBar.SizeToFit();
        searchController.SearchBar.SearchBarStyle = UISearchBarStyle.Prominent;

        TabBarController.NavigationItem.HidesSearchBarWhenScrolling = false;
        TabBarController.NavigationItem.SearchController = searchController;

        NavigationController.NavigationBar.PrefersLargeTitles = true;
        this.Title = "Search";

        _searchBar = searchController.SearchBar;
        _searchBar.SearchButtonClicked += SearchBar_SearchButtonClicked;
        _searchBar.TextChanged += SearchBarOnTextChanged;
        _searchBar.CancelButtonClicked += SearchBarOnCancelButtonClicked;

        TabBarController.NavigationItem.RightBarButtonItem = null;
    }
带搜索栏的选项卡视图的图片:

我想隐藏搜索栏但无法完成的其他选项卡视图:

    public override void ViewWillAppear(Boolean animated)
    {
        base.ViewWillAppear(animated);

        //var searchController = new UISearchController(searchResultsController: null);
        //searchController.SearchBar.Hidden = true;

        var search = new UISearchController(searchResultsController: null);
        TabBarController.NavigationItem.HidesSearchBarWhenScrolling = true;
        search.SearchBar.Hidden = true;

        NavigationController.NavigationBar.PrefersLargeTitles = true;
        TabBarController.NavigationItem.RightBarButtonItem = null;
    }
我不想显示搜索栏的选项卡视图的图片:

出现此问题的原因是您只需使用一个导航控制器包装Tabbar控制器。当用户输入第二个选项卡项(搜索)时,可以初始化
UISearchController
,并将其设置为
NavigationItem
SearchController
。因此,此搜索栏将根据您的需要显示

但是当您返回到
主页
控制器时,此
UISearchController
仍将存在,因为您只使用了一个
UINavigationController
。在您的
主页中添加以下代码
控制器的
视图将出现()
事件将解决您的问题:

TabBarController.NavigationItem.SearchController = null;
我真的建议您在您的情况下将一个
UINavigationController
分隔为四个。然后,每个选项卡栏项控制器都有自己的
NavigationItem
,并且不会相互影响
UITabbarController
应该是应用程序的根ViewController。您的应用程序的层次结构可以如下所示: 我使用故事板绘制两个选项卡项,帮助您理解我的意思

这样,在家庭控制器中,就不需要添加任何代码。您只需在搜索控制器中添加搜索栏,代码如下:

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

    var searchController = new UISearchController(searchResultsController: null);

    searchController.SearchBar.SizeToFit();
    searchController.SearchBar.SearchBarStyle = UISearchBarStyle.Prominent;

    this.NavigationItem.HidesSearchBarWhenScrolling = false;
    this.NavigationItem.SearchController = searchController;

    NavigationController.NavigationBar.PrefersLargeTitles = true;
    this.Title = "Search";

    _searchBar = searchController.SearchBar;
    _searchBar.SearchButtonClicked += _searchBar_SearchButtonClicked; ;
    _searchBar.TextChanged += _searchBar_TextChanged; ;
    _searchBar.CancelButtonClicked += _searchBar_CancelButtonClicked; ;

    this.NavigationItem.RightBarButtonItem = null;
}
我将代码移动到
ViewDidLoad()
事件,并将
TabBarController.NavigationItem
修改为
this.NavigationItem