ios - 如何在 Swift 中模仿 safari 的搜索栏 UI/动画?

标签 ios swift uinavigationbar uisearchbar

我正在尝试在我当前的应用程序上模仿 iOS Safari 中的搜索栏行为: img

我主要希望当用户滚动内容时导航栏向上滚动到一个非常小的版本,并在用户向上滚动时返回。

我尝试过使用scrollViewDidScroll,但我似乎无法让它模仿这种行为。我不确定是否将搜索栏正确添加到导航栏。

let searchBar: UISearchBar = {
    let sb = UISearchBar()
    sb.autocapitalizationType = .none
    sb.autocorrectionType = .no
    sb.keyboardAppearance = UIKeyboardAppearance.default
    sb.placeholder = "Search"
    return sb
}()

fileprivate func setupNav() {
    //Basic Setup
    navigationController?.navigationBar.isTranslucent = true
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

    //Search Bar
    searchBar.sizeToFit()
    navigationItem.titleView = searchBar
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    //Implement
}

最佳答案

let searchController                                  = UISearchController(searchResultsController: nil)
searchController.dimsBackgroundDuringPresentation     = false
searchController.searchBar.placeholder                = "Search"
searchController.searchResultsUpdater                 = self
navigationItem.searchController                       = searchController
definesPresentationContext                            = true 

将您的 SearchController 放入导航项中。这将添加可折叠的SearchBar。此外,您可以尝试使用导航项提示在顶部显示非常小的标题。

关于ios - 如何在 Swift 中模仿 safari 的搜索栏 UI/动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57915090/

相关文章:

ios - dequeueReusableCellWithIdentifier 不返回单元格

ios - 使用 Twilio iOS 客户端 SDK 检测语音通话断开

ios - 用于多个字典键的 Swift 过滤器

快速 Collection View 调整大小问题

ios - 在 UICollectionViewFlowLayout 的子类上更改 scrollDirection

ios - 更改 MoreNavigationController TableView Row 中的角标(Badge)值文本和背景颜色?

ios - UICollectionViewListCell 的自定义子类中的自调整大小在 iOS 14 中不起作用

ios - UINavigationBar 下方的 float 标题作为 subview - 接收触摸?

ios - 在 subview Controller 中调整 ScrollView 的插入

ios - 导航栏不占满整个屏幕