我正在使用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;
}
带搜索栏的标签视图图片: Search
其他标签视图,我想隐藏搜索栏但无法完成搜索:
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;
}
标签视图的图片,我不想显示搜索栏: Home
答案 0 :(得分:0)
出现此问题是因为您只使用一个包装TabbarController的导航控制器。当用户输入第二个标签栏项目(搜索)时,您初始化// App\Providers\BroadcastServiceProvider::class,
并将其设置为App\Providers\BroadcastServiceProvider::class,
' s UISearchController
。因此,您可以根据需要显示此搜索栏。
但是当您返回NavigationItem
控制器时,由于您只使用一个SearchController
,因此Home
仍然存在。在UISearchController
控制器UINavigationController
事件中添加以下代码将解决您的问题:
Home
我真的建议你在你的情况下将你的ViewWillAppear()
分成四个。然后每个tabbar项目控制器都有自己的TabBarController.NavigationItem.SearchController = null;
,并且不会相互影响。 UINavigationController
应该是您应用的根ViewController。您应用的层次结构可以是这样的:
我使用故事板绘制两个tabbar项目,帮助你理解我的意思。
以这种方式在Home控制器中,不需要添加任何代码。您只需在搜索控制器中添加搜索栏,其代码为:
NavigationItem
我将您的代码移至UITabbarController
事件,并将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()
。