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

时间:2018-01-03 20:51:03

标签: ios swift uinavigationcontroller uisearchbar uisearchcontroller

我的视图控制器视图顶部有一个带有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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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

在此之前,我将搜索栏和集合视图放在一个包含的视图中,希望搜索控制器动画将向上拉两个而不会使搜索栏消失。我还尝试将搜索栏放在滚动视图中,因为到目前为止唯一的解决方案是搜索栏作为集合视图的标题。以上都没有解决问题。

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