ios - 具有自定义宽度的 UISearchBar 在 UINavigationBar 向上滑动动画期间消失

标签 ios swift uinavigationcontroller uisearchbar uisearchcontroller

我的 View Controller View 顶部有一个带有 UISearchBar 的 UISearchController。搜索栏位于 UICollectionView 上方,整个设置是通过 SnapKit 安排的。

    visualEffectView.addSubview(searchBar)
    searchBar.sizeToFit()
    searchBar.searchBarStyle = .minimal

    searchBar.snp.makeConstraints { (make) -> Void in
        make.top.equalTo(topLayoutGuide.snp.bottom)
        make.leading.equalTo(visualEffectView.layoutMarginsGuide.snp.leading)
        make.trailing.equalTo(visualEffectView.layoutMarginsGuide.snp.trailing)
    }

这按预期显示:

enter image description here

当用户点击搜索栏并且导航栏被隐藏并拉动搜索栏时,问题就开始了:

enter image description here

因此搜索栏不再可见。我几乎肯定问题是搜索栏的顶部约束附加到顶部布局指南,反过来又被向上滑动的导航栏拉起。为此,我尝试在搜索栏编辑开始时删除约束,但无济于事。

我还尝试将搜索栏添加为下面 Collection View 的标题,这似乎在一定程度上起作用,但它会产生 2 个问题:a) 拉动刷新显示搜索栏上方的刷新控件和 b)在搜索栏上使用 sizeToFit 将其宽度缩小几个像素,使其与 Collection View 不对齐。

您建议我如何解决这个问题?也许通过拦截 UINavigationBar 动画并更新搜索栏约束?如果是,我该怎么做?

谢谢。

最佳答案

我最终放弃了这种方法,而是将搜索栏放在导航 Controller 栏上。

在此之前,我将搜索栏和 Collection View 都放在一个包含 View 中,希望搜索 Controller 动画将两者都向上拉,而不会使搜索栏消失。我还尝试将搜索栏放在 ScrollView 中,因为目前唯一有效的解决方案是将搜索栏作为 Collection View 的标题。以上均未解决问题。

不过,如果其他人遇到这个问题,我会非常有兴趣找到解决方案。

关于ios - 具有自定义宽度的 UISearchBar 在 UINavigationBar 向上滑动动画期间消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084939/

相关文章:

ios - 使用 kCATransitionMoveIn 在 UIView 中滑动时出现故障

IOS加载不同根的UiNavigationController的TabController

ios - MKUserTrackingBarButtonItem 色调 IOS7 不起作用,但在 IOS 6 上起作用

ios - 肯定发生的用于滚动的 UIScrollView 事件

ios - Parse.com PFUser signUpInBackgroundWithBlock : block not being called on first tap

objective-c - iPhone - 时区便利方法之间的差异

ios - 将数据传递到另一个 View Controller ,使用自定义结构数据类型,需要初始化程序?

swift - 如何仅在 Swift 中将一个 View Controller 的方向锁定为纵向模式

ios - Facebook Graph API - 获得相互喜欢

javascript - iOS 8 JavaScript 核心 : Where do you place your JavaScript files at?