【iOS】开发技巧——自动滚动的 SearchBar

在 iOS 开发中,有一个非常常用的控件——SearchBar,在很多 App 中,如 QQ、微信、网易云音乐等,使用频率都是相当的高。这个 SearchBar 你可以选择系统的 UISearchBar,也可以让美工给你切一个出来,当然你足够牛逼自己切也行,请收下我的膝盖。今天的主题显然不是探讨怎么切 SearchBar,毕竟我打的 Tag 是 iOS 不是 PS。
好,进入正题,我在使用各种“大型 App” 的过程中,发现它们都做了一个有趣的效果——SearchBar 的自动滚动。

好无聊啊好无聊啊好无聊啊MD写完这篇我先睡会读者请无视这句话。。

先谈谈总体设计

我们知道,就目前较为大众接受的设计而言,SearchBar 应该处于导航栏的下方,如下图:

By https://leodev.me

那么上文所述的这个效果是怎么样的呢?继续上图:

By https://leodev.me
By https://leodev.me

这是系统的设置界面的两张截图,QQ、微信截图我就不放了,你可以自己打开瞅一瞅,并非是为了保护什么隐私,这个时代还谈什么个人隐私。

你可以打开设置,尝试轻轻拖动界面,放开手,你会发现顶部的 SearchBar 时而主动显示,时而又主动隐藏,别的不说,用户体验莫名大增。那么问题来了。

效果看过了,现在该来尝试实现了,这才是本文的重点。刚开始看到这个效果我想做做但我的大脑是拒绝的,但是一想这好感大增的用户体验,我的大脑还是屈服了。一开始我也以为这个实现起来很难很难的,然后我就忧伤地敲了敲代码,然后发现,卧槽这么简单?!

代码实现

关键代码如下,利用 UIScrollView 的代理方法即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma mark - UIScrollView Delegate

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

CGPoint contentOffset = scrollView.contentOffset;

if (contentOffset.y < 22.0f) {

[scrollView setContentOffset:CGPointZero animated:YES];

} else if (contentOffset.y < 44.0f) {

[scrollView setContentOffset:CGPointMake(0, 44.0f) animated:YES];
}
}

至于为什么取 22 和 44 就不用讲了吧,SearchBar 高度约定俗成清一色 44,当然如果你的美工给你指定了另外的高度,你自己换算下就可以了,除二会除吧。

真应了那句话,大道至简

特色注解

①“大型 App”:即活跃用户较多的 App,比如 德玛西亚 0.0

联系与捐赠

  • Mail: echo bGVvZGF4aWFAZ21haWwuY29tCg== | base64 -D
  • GitHub: iTofu