在UIKit中UIScrollView三大子类,分别是:UITextView、UITableView和UICollectionView。
一、contentOffset、contentSize和 contentInset属性####
frame:一个矩形区域,反映当前view相对于它的superview的位置关系.
bounds:是一个矩形区域,反映的是当前view自己的位置关系。
普通View视图,bounds.origin = (0, 0)
可滑动的视图,scrollView.bounds.origin = scrollView.contentOffset;contentOffset、contentSize和 contentInset这三个属性直接相关的是UIScrollView的属性contentView。UIScrollView可以看成是一个两层的复合视图。上层是固定不动的UIScrollView,下层是可以滑动的contentView,contentView的尺寸可以大于上层的UIScrollView。
-
frame和bounds决定的是scrollView在屏幕上的可见区域,contentView代表scrollview中的可显示内容区域,contentOffset、contentSize和 contentInset和scrollview相关。定义如下:
@property(nonatomic) CGPoint contentOffset; // default CGPointZero @property(nonatomic) CGSize contentSize; // default CGSizeZero @property(nonatomic) UIEdgeInsets contentInset; // default UIEdgeInsetsZero. add additional scroll area around content
contentSize:确定scrollView的属性contentView的宽(contentSize.width)和高(conteSize.height)的属性。(这个最好理解)
-
contentOffset:确定的是当前显示区域(contentView)顶点相对于frame顶点的偏移量。
假设Controller中的UIScrollView的frame是Controller的bounds。 UIScrollView往下拉,contentOffset.y < 0; UIScrollView往上滑,contentOffset.y > 0; (上加下减) UIScrollView往左滑,contentOffset.x > 0; UIScrollView往右滑,contentOffset.x < 0。 (左加右减)
contentInset:确定的是contentView与scrollView的相对位置。如果scrollView.contentInset = UIEdgeInsetsMake(0, 100, 0, 0), 那么contentOffset坐标为(-100,0)。contentView显示从scrollView中的(100,0)开始显示。
二、scrollsToTop 属性####
- scrollsToTop是UIScrollView的一个属性,默认为YES。主要用于点击设备的状态栏时,scrollsToTop = YES的控件滚动返回至顶部。
- 在一个ViewController中有多个UIScrollView实例,要想实现某一实例响应点击设备状态栏,返回顶部,需要把其他的UIScrollView的实例的scrollsToTop属性设为NO。
参考链接: IOS中scrollsToTop问题小结