Xamarin.ios:搜索栏显示在每个选项卡栏视图中
我正在用Xamarin.iOS MvvmCross构建一个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
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