IOS开发—UIScrollView的contentSize、contentInset、contentOffset的理解

原以为对scrollView的这几个属性已经够了解了,最近碰到contentInset才发现自己依旧是含糊不清的,在此再做一番理解:

UIScrollView:以容器的方式存在

contentView:内容视图,scrollView上用来滚动的区域,姑且将其当做是一个view方便理解,addscrollView上的视图或者控件都是添加在这上面的。这个东西并不存在,或者说不知道是否存在,至少我们看不到,只是个遐想的东西,理解必须要借助它。

contentSizecontentViewsize,即滚动视图的大小。

contentInsetcontentView的展示区域,或者滚动区域,默认为UIEdgeInsetsZero,即默认整个scrollView(容器)为展示区域。所谓展示区域,就是contentView可以在这个范围内任意滚动。

contentOffsetCGPonit属性,是scrollView左上角原点相对于contentView左上角的偏移量。


这样讲可能有点抽象了,打个比方,将一张画布放在一个橱窗上展示,那么:

scorllView <————> 橱窗

contentView <————> 画布 

contentSize <————> 画布大小

contentInset <————> 决定橱窗上的展示画布的区域

contentOffset <————> 橱窗原点相对于画布当前位置的偏移


当画布大小大于展示区域,即画布的长或宽大于展示区域的长或宽时,这时候画布是不能够在橱窗上完整显示的,这个时候画布就能在橱窗的展示区域内任意滚动,但是不能超出展示区域边缘。


假设有一个scrollViewframe{00self.view.frame.size.width, self.view.frame.size.height}

设置contentInsetUIEdgeInsetsMake(100, 0, 100, 0),即上下均偏移100,那么这个scrollView的滚动区域(展示区域)则为{0100self.view.frame.size.width, self.view.frame.size.height-200 }

接下来设置scrollViewcontentSize,即内容视图的大小,假如我们将尺寸宽高设置为和滚动区域一样大或者比滚动区域小,那么运行发现是无法滚动的,因为这个时候滚动区域能完全展示内容视图,还要它滚动干嘛呢?如果contentSize的尺寸比滚动区域大,那么运行发现是可以滑动的,假如宽度和滚动区域一致,高度比它大100,那么就能在垂直方向滚动,滚动上下极限偏差相差100  

设置contentOffset的效果则是指定画布滚动到什么位置。调用方法- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated可以使这个过程伴随滚动动画。


几个注意点:

1、添加到scrollView上的视图是被添加上contentView上的。

2、先设置contentSize再设置contentInset和先设置contentInset再设置contentSize的一开始展示效果(即初始效果)是不一样的,实际效果是一样的。在一开始不设置contentOffset的情况下,对前者而言,一开始展示出来的效果是content view的上沿跟滚动区域的上沿贴合;而对于后者而言,contentView的上沿则是跟scrollView的上沿贴合。通常情况下,后者才是我们想要的效果,因此一般情况下先设置contentInset再设置contentSize

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值