swift - TVOS : Adjust the position of searchbar in UISearchViewController

标签 swift uisearchbar tvos uisearchcontroller

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

enter image description here

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)

最佳答案

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

// 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 上对此进行了测试。

关于swift - TVOS : Adjust the position of searchbar in UISearchViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673209/

相关文章:

ios - UISearchBar 在点击时消失

ios - 如何在 Swift 中使用 MarqueeLabel?

tvOS AVPlayerViewController视频信息

ios - CollectionView 高度问题

swift - MapKit 从核心数据添加多个注释

ios - 在 Swift 中有可变按钮

ios - 如何更改清除按钮图像(x 按钮)或至少更改搜索栏中清除按钮图像的颜色?

Swift 可选运算符的使用

iphone - 使用搜索栏时,表格仅显示 2 个标签(共 4 个)

swift - 检测 UIViewController 何时被 tvOS 中的 Remote 菜单按钮关闭