UIScrollView的工作原理,当手指touch的时候,UIScrollView会拦截Event,会等待一段时间,在这段时间内,如果没有手指没有移动,当时间结束时,UIScrollView会发送tracking events到子视图上。在时间结束前,手指发生了移动,那么UIScrollView就会进行移动,从而取笑发送tracking。
那么,UIScrollView的子类想要接受touch事件,就是用户点击UIScrollView上的视图时,要先处理视图上的touch,而不发生滚动。这时候就需要UIScrollView的子类重载touchesShouldBegin:withEvent:inContentView: ,从而决定自己是否接受子视图中的touch事件。
注意:scrollView的子控件不能依据scrollView的边距来动态设置高度和宽度,这样的话scrollView不能根据内部子控件来计算contentSize了。所以scrollView的子控件需要自己有明确宽高,这个是一种解决办法;还有的解决办法是在scrollView上面加一个view,所有的控件都相对于View布局;大多数情况下,我觉的如果scrollView加在父View上的话,那么它的子视图可以根据父View来写约束进行布局,这样还是比较省事的,而且scrollView能根据子视图的大小来计算contentSize,不影响滑动。
1.==============UISCrollView 在自动布局中的使用注意
//在autolayout下,会在viewDidAppear之前根据subview的constraint重新计算scrollview的contentsize。这就是为什么,在viewdidload里面手动设置了contentsize没用。因为在后面,会再重新计算一次,前面手动设置的值会被覆盖掉。
// 解决办法就是:
// 1.去除autolayout选项,自己手动设置contentsize
// 2.如果要使用autolayout,要么自己设置完subview的constraint,然后让系统自动根据constraint计算出contentsize。要么就在viewDidAppear里面自己手动设置contentsize。
self.baseScrollView.contentSize=CGSizeMake(0,self.view.frame.size.height*2-300);//basescrollView的滚动范围
2.UISCrolview内部的控件布局的时候不能相对于UIScrollview布局;