如何设置scrollview的contentoffset却不触发DidScroll方法

本文介绍如何自定义FS日历头部布局,通过使用bounds替代contentoffset实现左右切换月份的功能,避免了scrollViewDidScroll方法的自动调用导致的日历逻辑混乱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:https://blog.51cto.com/10234042/1933816

由于项目需要自定义一个日历,后来在GitHub上找到了FSCalendar跟我们的项目需求很相似,就想拿过来改一下,看了看代码,作者逻辑代码能力挺强悍的(最起码我看代码饶了很长时间还没有完全看懂)。我们的需求就是要把FS日历的hearder换成中间显示月份两边是两个button可以点击向左向右切换月份,由于作者所有切换日历的逻辑都写在Scrollview的代理方法scrollViewDidScroll里面,所以在我的button点击事件里面设置Scrollview的contentoffset的时候,系统会自动调用ScrollviewDidScroll方法,所以除了执行点击事件里面我设置的更换日历相关逻辑,还会自动调用ScrollviewDidScroll方法中实现的逻辑,导致混乱。最终还是受作者的代码启发,使用bounds代替contentoffset,同样实现切换Scrollview显示的位置但是不会触发ScrollviewDidScroll方法,核心代码如下:

    

_scrollView.bounds = CGRectOffset(_scrollView.bounds, self.flowOffset.x, self.flowOffset.y);

 

其实bounds的x,y值也是可以不为0的,不为0时代表相对于自身坐标系的位置偏移,和contentoffset作用相似,做个笔记,如有错误,敬请指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值