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常量值来设置合理的减速速率。