一、设定滚动方向
禁止UIScrollView垂直方向滚动,只允许水平方向滚动
scrollview.contentSize = CGSizeMake(你要的长度, 0);
禁止UIScrollView水平方向滚动,只允许垂直方向滚动
scrollview.contentSize = CGSizeMake(0, 你要的宽度);
注意事项:
但是即使设置了contentSize的大小,还是有个坑要注意一下:因为contenInset值被意外修改过的时候,scrollview仍然可以滑动。
再配上UINavigationController每次push后再pop回来的情景,UIScrollView的contenInset都会重写改变重置,下面是KVO监测到的数据:
这种问题对于经验不久的新手来说很难定位到问题的所在。
下面是我在此复合情景中禁止scrollView上下滑动处理方法:
//设置contentSize
scrollView.contentSize = CGSizeMake(ksScreenWidth, 0);
[scrollView addObserver:self forKeyPath:@"contentInset" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
//重写observeValueForKeyPath方法
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqual:@"contentInset"])
{
NSlog(@"contentSize被改变了");
NSlog(@"\n contentInset新:%@\n contentInset老:%@", [change objectForKey:@"new"],[change objectForKey:@"old"]);
if (object == scrollView) {
UIEdgeInsets insets =[[change objectForKey:@"new"] UIEdgeInsetsValue] ;
if (insets.bottom>0||insets.top>0) {
scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
}
}
}
}
- (void)dealloc
{
/**
* 移除监听
*/
[scrollView removeObserver:self forKeyPath:@"contentInset"];
}
二、自定义翻页效果尺寸
UISCrollView在设置属性pagingEnable=YES时会有一个自带的滑动翻页效果,默认的滑动翻页尺寸是屏幕的宽(或者高)的整数倍,在某些场景下我们需要自定义滑动翻页的尺寸,只需要修改下面这个代理方法的targetContentOffset参数,
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset;
这个方法在pagingEnable=YES的时候也会调用;
但是pagingEnable的效果会覆盖这个方法的效果,达不到我们想要的“刚好停到指定位置的效果”,所以还是需要注意将pagingEnable设置为NO!
示例代码:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
CGPoint originalTargetContentOffset = CGPointMake(targetContentOffset->x, targetContentOffset->y);
CGPoint targetCenter = CGPointMake(0,0);//目标位置
*targetContentOffset = targetCenter;
}
参考地址:http://www.cnblogs.com/Phelthas/p/4584645.html
还有另外一种更全面的方案,参考:http://www.cnblogs.com/silence-cnblogs/p/6529728.html