【问题标题】:TVOS : Adjust the position of searchbar in UISearchViewControllerTVOS : 调整 UISearchViewController 中搜索栏的位置
【发布时间】:2018-02-07 21:04:01
【问题描述】:

我正在开发一个 TVOS 应用程序。我使用下面的代码在 UITabBarController 中实现搜索功能。显示标签栏然后搜索栏被标签栏覆盖的问题。请参阅下面的屏幕截图。如果显示标签栏,是否可以将搜索栏位置向下移动?

let searchViewController = VVSearchViewController()
    let searchController = UISearchController(searchResultsController: searchViewController)
    searchViewController.searchViewController = searchController

    searchController.searchResultsUpdater = searchViewController

    searchController.obscuresBackgroundDuringPresentation = true

    let searchPlaceholderText = "Search"
    searchController.searchBar.placeholder = searchPlaceholderText
    searchController.searchBar.tintColor = UIColor.black
    searchController.searchBar.barTintColor = UIColor.black
    searchController.searchBar.searchBarStyle = .minimal
    searchController.searchBar.keyboardAppearance = .dark

    searchController.view.backgroundColor = UIColor.black
    searchController.definesPresentationContext = true;
    UISearchContainerViewController(searchController: searchController)

【问题讨论】:

    标签: swift uisearchbar tvos uisearchcontroller


    【解决方案1】:

    您可以在应用程序“App Store”的标签搜索中找到完全相同的案例。

    这是因为在 tvOS 中,viewController 的内容不应该对标签栏的可见性做出反应。标签栏显示在其顶部,重叠。

    tvOS 标签栏的人机界面指南: https://developer.apple.com/tvos/human-interface-guidelines/interface-elements/tab-bars/

    【讨论】:

      【解决方案2】:

      这是可能的。 我花了一段时间,但我的想法是将搜索控制器添加到顶部有约束的“容器”控制器中。如果您尝试将 UISearchController 作为子视图控制器添加到容器中,则不会出现任何内容。 UISearchContainerViewController 也不能正常工作。但是以 UISearchContainerViewController 为根的导航控制器可以工作。这是我的代码:

      // Create the search controller and it's results controller
              let resultsController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SearchResultsViewController") as! SearchResultsViewController
              let searchController = UISearchController(searchResultsController: resultsController)
              searchController.searchResultsUpdater = resultsController
              
      // Customize it
              UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [.foregroundColor: UIColor.text]
      
              searchController.searchBar.placeholder = NSLocalizedString("Search", comment: "")
              searchController.searchBar.tintColor = .text
              searchController.searchBar.barTintColor = .text
              searchController.searchBar.searchBarStyle = .minimal
              searchController.searchBar.keyboardAppearance = .dark
      
      // Embed it in UISearchContainerViewController
              let searchContainerViewController = UISearchContainerViewController(searchController: searchController)
      // Make UISearchContainerViewController root controller of a navigation controller
              let navController = UINavigationController(rootViewController: searchContainerViewController)
      // And a container to hold everything
              let containerViewController = UIViewController()
                  
      // Do a standard child add of navController into containerViewController
              navController.loadViewIfNeeded()
              navController.viewWillAppear(false)
              navController.willMove(toParent: containerViewController)
              
              containerViewController.view.addSubview(navController.view)
              navController.view.frame = containerViewController.view.bounds
      
      // Add your constraints. In this case I just want the search bar to be 150 px down.
              NSLayoutConstraint.activate([
                  navController.view.topAnchor.constraint(equalTo: containerViewController.view.safeAreaLayoutGuide.topAnchor, constant: 150),
                  navController.view.leftAnchor.constraint(equalTo: containerViewController.view.safeAreaLayoutGuide.leftAnchor),
                  navController.view.bottomAnchor.constraint(equalTo: containerViewController.view.safeAreaLayoutGuide.bottomAnchor),
                  navController.view.rightAnchor.constraint(equalTo: containerViewController.view.safeAreaLayoutGuide.rightAnchor)
              ])        containerViewController.addChild(navController)
      
              containerViewController.addChild(navController)
              navController.didMove(toParent: containerViewController)
              navController.viewDidAppear(false)
      
      // And from here use the containerViewController as normal to display a search into your app.
      

      注意:如果没有在 navController 上传递 viewDidAppear,这是行不通的。 注意 2:我仅在 tvOS 13 和 14 上对此进行了测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-16
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多