在UINavigationController

时间:2018-12-24 10:15:30

标签: ios swift uinavigationbar uisearchbar

我有这顶NavigationController的帽子,为其NavigationBar启用了大标题。根ViewController有一个SearchController,并且在ViewController的{​​{1}}中hidesSearchBarWhenScrolling设置为True,因为我不希望NavigationItem总是可见。 SearchBar有一个ViewController,当您点击其中一个项目时,将使用情节提要脚本将相同的TableView的新实例推送到导航堆栈中。但是,在查看当前ViewController与新ViewController之间的过渡时,您会发现动画看起来不正确:将新ViewController移动到SearchBar中空,只显示其背景。当新的ViewController最终完全可见时,SearchBar将消失而没有任何动画。

这就是我添加SearchController的方式(这里没什么好看的):

class MyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let searchController = UISearchController(searchResultsController: nil)
        navigationItem.searchController = searchController
        navigationItem.hidesSearchBarWhenScrolling = true
    }
}

因此,从“一个”导航到“两个”时看起来像这样:

UISearchController / UINavigationBar shows broken animation when used within UINavigationController

enter image description here

有没有办法使它看起来更好?当然,在新的ViewController中,SearchBar最初应该不可见,因此必须以某种方式消失。但是我认为也许应该以某种方式淡出旧SearchBar上的ViewController而不是呆在那里,然后在过渡到新ViewController时突然隐藏。希望我在这里做错了...

感谢大家,祝大家圣诞快乐,

彼得

2 个答案:

答案 0 :(得分:0)

尝试在viewWillDissappear方法中将搜索控制器设置为nil。

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationItem.searchController = nil
}

答案 1 :(得分:0)

好吧,我终于找到了非常有用的东西,在问我问题之前我找不到:

Broken UISearchBar animation embedded in NavigationItem

太可惜了,这是从iOS 11开始就知道的,但仍然没有解决。