iOS:一用就上瘾的BottomSheetView

2018 年 8 月 20 日 CocoaChina

本公众号内容均为本号转发,已尽可能注明出处。因未能核实来源或转发内容图片有权利瑕疵的,请及时联系本号,本号会第一时间进行修改或删除。 QQ : 3442093904 


项目中有类似于外卖软件的已点菜品列表,类似于下图:



可以看到列表的显示与隐藏,都只能通过按钮触发。不能通过手势驱动。不能设置最小可显示范围。针对以上问题,就有了这个项目。


其实以上的需求核心问题就一个,如何优雅的解决:当内容还未到最大可显示范围时,列表里的内容不能滚动;当内容显示到最大的时候,如何不断开当前滚动手势,继续滚动列表里的内容。


之前写了一个类似的底部列表滚动视图,地址:https://github.com/pujiaxin33/JXBottomSheetTableView 里面的实现方案还是挺有趣的,对外完全封装了里面的滚动控制细节,且以UITableView的子类实现。无奈越骚的操作越容易翻车。里面的应用场景比较狭窄,需求一变动就GG了。


所以重新写了这个库,使用场景更大,使用更方便,交互更友善,好了,不说了,快上车吧!


原理


为JXBottomSheetView添加一个UIPanGestureRecognizer,成为其delegate,并让shouldRecognizeSimultaneouslyWithOtherGestureRecognizer方法返回true;
如此一来,内容承载视图与列表视图的滚动手势可以同时响应了。接着,我们需要处理好当内容承载视图未显示到最大值时,列表视图(UITableView、UICollectionView)的contentOffset.y会被强制设置为0,营造一种列表内容未滚动的假象;
当内容承载视图滚动到最大的时候,就放开对列表视图的滚动限制。
其他一些细节可以参看源码了解;


Github地址


https://github.com/pujiaxin33/JXBottomSheetView


特性


  • 支持长距离滚动,不断手势:当列表视图滚动到规定的最高点时,停止视图移动,转而滚动里面的内容;

  • 内容自适应:当列表的数据源发生变动时,会根据最新的contentSize调整布局;

  • 切换流畅:最大、最小的手势切换,借鉴了系统UIScrollView的PagingEnabled切换效果;


预览


  • 普通短距离滚动

  • 长距离滚动,手势没有停掉。滚动到顶部的时候,继续滚动里面的内容

  • 内容自适应,根据contentView的contentSize自动调整布局


属性/方法



使用

        tableView = UITableView.init(frame: CGRect.zero, style: .plain)

        let bottomSheet = JXBottomSheetView(contentView: tableView)
        bottomSheet.defaultMininumDisplayHeight = 100
        bottomSheet.defaultMaxinumDisplayHeight = 300
        bottomSheet.displayState = .minDisplay
        bottomSheet.frame = self.view.bounds
        view.addSubview(bottomSheet)


注意

  • 内部会影响到外部的代码

if let tableView = contentView as? UITableView {
          tableView.estimatedRowHeight = 0
      }
  • 数据源的增删,请使用reloadData,而不是insertRows、deleteRows刷新页面。因为...你试一下就知道了。


相关推荐:


登录查看更多
0

相关内容

iOS 是苹果公司为其移动产品开发的操作系统。它主要给 iPhone、iPod touch、iPad 以及 Apple TV 使用。原本这个系统名为 iPhone OS,直到2010年6月7日 WWDC 大会上宣布改名为 iOS。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【芝加哥大学】可变形的风格转移,Deformable Style Transfer
专知会员服务
30+阅读 · 2020年3月26日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
ISeeYou一款强大的社工工具
黑白之道
30+阅读 · 2019年5月17日
已删除
架构文摘
3+阅读 · 2019年4月17日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
抖音爬虫
专知
3+阅读 · 2019年2月11日
React Native 分包哪家强?看这文就够了!
程序人生
13+阅读 · 2019年1月16日
超级!超级!超级好用的视频标注工具
极市平台
8+阅读 · 2018年12月27日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Advances in Online Audio-Visual Meeting Transcription
Arxiv
4+阅读 · 2019年12月10日
Deep learning for cardiac image segmentation: A review
Arxiv
21+阅读 · 2019年11月9日
Arxiv
3+阅读 · 2012年11月20日
VIP会员
相关资讯
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
ISeeYou一款强大的社工工具
黑白之道
30+阅读 · 2019年5月17日
已删除
架构文摘
3+阅读 · 2019年4月17日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
抖音爬虫
专知
3+阅读 · 2019年2月11日
React Native 分包哪家强?看这文就够了!
程序人生
13+阅读 · 2019年1月16日
超级!超级!超级好用的视频标注工具
极市平台
8+阅读 · 2018年12月27日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Top
微信扫码咨询专知VIP会员