【问题标题】:Xamarin.ios: Search bar displays in every tab bar viewXamarin.ios:搜索栏显示在每个选项卡栏视图中
【发布时间】:2018-04-30 23:30:14
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: xamarin.ios tabs mvvmcross searchbar tabview


    【解决方案1】:

    出现此问题是因为您只使用了一个导航控制器来包装 TabbarController。当用户输入第二个标签栏项(搜索)时,您初始化一个UISearchController 并将其设置为NavigationItemSearchController。所以这个搜索栏会随心所欲地出现。

    但是当您返回Home 控制器时,这个UISearchController 仍然存在,因为您只使用了一个UINavigationController。在您的Home 控制器的ViewWillAppear() 事件中添加以下代码将解决您的问题:

    TabBarController.NavigationItem.SearchController = null;
    

    我真的建议您根据您的情况将您的UINavigationController 分成四个。那么每个tabbar item controller都有自己的NavigationItem,不会互相影响。 UITabbarController 应该是您应用的根 ViewController。您的应用程序的层次结构可以是这样的: 我使用故事板来绘制两个标签栏项目,以帮助您理解我的意思。

    这样在 Home 控制器中,无需添加任何代码。您可以使用代码在 Search 控制器中添加搜索栏:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多