前言
知识是无穷无尽,技术需要积累,记录一点一滴,让成长的时间轴上变得充实一些。
今天就讲讲UITableView/UICollectionView的一些使用技巧。结合自己项目情况进行展开。
Header/Footer高度、悬停设置
高度设置
有时候我们需要设置 TableView 的头部和尾部的间距,头部尾部的高度只需要在代理里面设置高度就行。
示例代码如下:
|
|
小结:通过上面的代码实现的效果可以看出,当自定义头部和尾部视图时,即使自定义头部和尾部视图设置了高度。高度最终还是由tableView:heightForHeaderInSection:
和tableView:heightForFooterInSection:
两个代理方法决定。当没有实现这两个代理方法时,高度为默认高度。
悬停
TableView的悬停功能只有在 Style
是 UITableViewStylePlain
的时候才有。如果有这么一种需求,就是需要有Header悬停,同时每个section之间需要有间隔。
效果如下:
方式一(全部悬停):
|
|
方式二(部分悬停):
|
|
CollectionView的悬停功能只有在 Style
是 UITableViewStylePlain
的时候才有。如果有这么一种需求,就是需要有Header悬停,同时每个section之间需要有间隔。
效果如下:
滚动监听
UIScrollView 减速
可能通过decelerationRate的属性来设置,它的值域是(0.0,1.0),当decelerationRate设置为0.1时,当手指touch up时就会很慢的停下来。
UIScrollView 如何判断停止滑动
这里停止滑动的意思要明确一下,有两种:
1、第一种是指手指停止ScrollView。
当手指停止滑动时,iOS会调UIScrollView的delegate
|
|
如果decelerate还为NO时,它最终停下,否则它还没最终停下
2、第二种是指ScrollView停止滑动,指的滚动条完全停止下来。
当decelerate = true时,iOS才会调UIScrollView的delegate
|
|
那UIScrollView真正停止滑动,应该怎么判断呢?
解决方法如下:
|
|
UIScrollView左右滑动到某个位置时,禁止继续向左或者向右滑动
|
|
消息传递
当手指触摸后,scrollView会暂时拦截触摸事件,使用一个计时器,假如在计时器到点后,没有发生手指移动事件,那么,scrollView发送tracking events到被点击的subView。
假如在计时器到点前,发生了移动事件,那么scrollView取消tracking自己发生滚动。
子类可以重载touchesShouldBegin:withEvent:inContentView:
决定自己是否接收touch事件。
当pagingEnabled
值为YES
,会自动滚动到subView的边界,默认是NO
。
touchesShouldCancelInContentView:
开始发送tracking messages消息给subView的时候
调用这个方法,决定是否发送tracking messages消息到subview,假如返回NO
,则发送,YES
则不发送。
假如canCancelContentTouches
属性是NO
,则不调用这个方法来影响如何处理滚动手势。
修改tableView中headerView的位置(类似美团外卖首页)
实现原理就是监听滚动情况,重设scrollView.contentInset即可
效果如下:
|
|
顶部拉伸效果(头像拉伸)
实现思路:自定义一个ViewA,作为TableView的headerView,然后监听TableView的滚动,将回调传递给ViewA即可。
效果如下:
下面是自定义MOActivityTopView
.h文件
|
|
.m文件
|
|
监听滚动
|
|
再一次感谢您花费时间阅读这篇文章!
微博: @Danny_吕昌辉
博客: SuperDanny