iOS中的UIScrollView 滚动视图

UIScrollView这个类(也就是滚动视图),可以让我们展示比window尺寸大的内容。用户可以通过手势来实现视图的滚动和缩放。

有一个很好的例子,就是今日头条上的滑动目录就是基于ScrollView实现的

UIScrollView继承于UIView,是UITableView和UITextView等UIKit类的父类。
scrollView frame 相当于是这是View显示在界面上的大小

//创建
 UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(50, 50, 314, 500)];

 //设置背景颜色
 scrollView.backgroundColor = [UIColor redColor];

设置contentSize,这是UIScrollView的内容视图的尺寸,通常contentSize大于UIScrollView的frame (整个内容的大小)

 scrollView.contentSize = CGSizeMake(314*3, 500); //非常重要
 //设置是否可以滚动
 scrollView.scrollEnabled = YES;   // 默认为YES
 //设置是否可以整页滚动
 scrollView.pagingEnabled = YES;  
 // 默认为NO。如果为YES,滑动会停止在视图边界长度的倍数上。

设置偏移量contentOffset

 //CGPoint类型,默认为CGPointZero
 scrollView.contentOffset = CGPointMake(314, 200);

设置是否显示滚动条

//显示水平方向的滚动条(默认YES)
scrollView.showsHorizontalScrollIndicator = NO;
//显示垂直方向的滚动条(默认YES)
scrollView.showsVerticalScrollIndicator = NO;

设置是否反弹

scrollView.bounces = NO;
// 默认为YES。如果该属性为YES,视图滚动时可以越过边界,越过边界后会被弹回。(使用时如果滑到边界时是否会有回弹效果)

如果bounces设为NO,以下两个属性不论是不是YES都不会奏效:

//控制滚动视图遇到垂直方向是否反弹
scrollView.alwaysBounceVertical = YES;// 默认为NO
//如果该属性和bounces同时为YES,那么即使contentSize的height小于frame的height,竖直方向的拖拽也是允许的。

//控制滚动视图遇到水平方向是否反弹    
scrollView.alwaysBounceHorizontal = YES;//默认为NO
//如果该属性和bounces同时为YES,那么即使contentSize的width小于frame的width,水平方向的拖拽也是允许的。

//控制滚动视图遇到水平方向是否反弹    
scrollView.alwaysBounceHorizontal = YES;//默认为NO
//如果该属性和bounces同时为YES,那么即使contentSize的width小于frame的width,水平方向的拖拽也是允许的。

其他设置

  • delegate: scrollView的委托对象,该委托对象必须实现UIScrollViewDelegate协议,这些方法会在合适的时候被调用
  • scrollToTop:是否启动“滚动至顶端”手势,默认值为YES。当用户使用了“滚动至顶端”手势(轻击状态栏)时,系统会要求离状态栏最近的scrollView滚动到顶端,如果scrollToTop设置为NO,则该scrollView的delegate的scrollViewShouldScrollToTop:方法会返回NO,不会滚动到顶端。否则,则会滚动到顶端。滚动到顶端之后,会给delegate发送scrollViewDidScrollToTop:消息。需要注意的是,在iphone上,如果有多个scrollview的scrollToTop参数设置为YES的时候,“滚动至顶端”手势会失效。
  • decelerationRate: 手指滑动后抬起,页面的减速速率。可以使用UIScrollViewDecelerationRateNormal和UIScrollViewDecelerationRateFast常量值来设置合理的减速速率。

推荐阅读更多精彩内容