首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UINavigationController + UISearchController

UINavigationController + UISearchController
EN

Stack Overflow用户
提问于 2019-08-28 14:21:40
回答 1查看 394关注 0票数 0

摘要

当一个子UINavigationController将一个UISearchController嵌入到导航项的搜索控制器中时,就会显示坏的动画。

只有当我在导航项中设置UISearchController时,才会发生这种情况。

在下面的图片中有两个例子:

  1. 改变位置ViewController -当点击Back (设置)按钮时有动画滞后。
  2. 自定义ViewController -工作良好。

UITableViewController > UIViewController,在导航项中嵌入UISearchController

发现

我研究了这种行为,并找到了一些描述类似行为的答案,但与我的设置不完全相同。

试图通过将导航项搜索控制器设置为nil来实现以下文章中建议的解决方案--没有解决此行为:

Broken UISearchBar animation embedded in NavigationItem

代码在下面。提前谢谢。

代码语言:javascript
复制
class ChangeLocationViewController: UIViewController {

    // MARK: - Outlets
    @IBOutlet weak var locationBanner: CustomView!
    @IBOutlet weak var locationNameLabel: UILabel!
    @IBOutlet weak var locationTimeLabel: UILabel!
    @IBOutlet weak var mapView: MKMapView!

    let loadingBanner = LoadingBanner()

    var resultsViewController: GMSAutocompleteResultsViewController?
    var searchController: UISearchController?
    let locationManager = LocationManager.shared

    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.locationManagerDelegate = self

        GMSPlacesClient.provideAPIKey(AppSettings.googleAPIKey)

        self.definesPresentationContext = true;


        resultsViewController = GMSAutocompleteResultsViewController()
        resultsViewController?.delegate = self

        let autoCompletedFilter = GMSAutocompleteFilter()
        autoCompletedFilter.type = .city
        resultsViewController?.autocompleteFilter = autoCompletedFilter

        searchController = UISearchController(searchResultsController: resultsViewController)
        searchController?.searchResultsUpdater = resultsViewController
        searchController?.hidesNavigationBarDuringPresentation = false
        searchController?.searchBar.placeholder = "Search a place".localized
        searchController?.delegate = self

        // Setting the search controller [when it is not set, everything works great :)]
        navigationItem.searchController = searchController
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        // Removing the search controller
        self.navigationItem.searchController = nil
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-08-28 15:02:06

当其他视图控制器也出现时,将navigationItem.searchController设置为nil

代码语言:javascript
复制
class ChangeLocationViewController: UIViewController {
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        /* searchController */
        searchController.isActive = false
        navigationItem.searchController = nil
    }
}

class SettingsTableController: UITableViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        /* searchController */
        navigationItem.searchController = nil
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57694602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档