contentOffset
中UIScrollView
属性的用途是什么?
答案 0 :(得分:66)
它可以被视为<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="container">
<svg width="100%" height="80" class="tabcontainer">
<svg width="100%" height="20" viewBox="0 0 132 20" class="tabbutton">
<polygon points="16,0, 116,0, 132,20, 0,20"/>
<g transform="translate(66,0)" fill="white">
<rect x="-8" y="4" width="16" height="3"/>
<rect x="-8" y="9" width="16" height="3"/>
<rect x="-8" y="14" width="16" height="3"/>
</g>
</svg>
<rect y="20" width="100%" height="60" fill="red" class="tabbody"/>
</svg>
</div>
框架相对于其scrollView
框架原点的原点坐标。见下图:
答案 1 :(得分:50)
根据 documentation ,contentOffset
属性代表:
的起源点 内容视图偏离原点 滚动视图。
简单地说,它是视图在每个方向(垂直和水平)移动了多远。您可以通过访问x
的{{1}}和y
属性解压缩垂直和水平距离:
CGPoint
答案 2 :(得分:2)
在这里您看到两个矩形:
滚动正在更改整个区域内可见区域的原点。
在iOS中,所有视图都有一个由view.bounds
矩形表示的可见区域。类UIScrollView
是具有唯一属性的视图:它具有第二个称为“内容视图”的矩形,其尺寸大于其边界。因此,在滚动视图中:
scrollView.bounds
scrollView.contentSize
contentOffset
是scrollView.bounds.origin
的另一个名称,实现如下:
var contentOffset: CGPoint {
get { return bounds.origin }
set {
var bounds = self.bounds
bounds.origin = newValue
self.bounds = bounds
}
}
当我们以编程方式更改contentOffset时,我们还将更改bounds.origin,这将导致呈现内容视图的不同区域。如果我们使用setContentOffset(pt, animated: true)
对此更改进行动画处理,则滚动视图似乎会随着用户手指的拖动而滚动。
官方文档定义了contentOffset,如下所示(斜体是我的):
contentOffset
:内容视图(总区域)的原点与滚动视图(可见区域)的原点偏移的点 em>。
我想强调@westsider对已接受答案的评论:
例如,如果要显示n个可以滚动的页面,则可以创建一个带有contentSize(n * pageWidth,pageHeight)和边界大小(pageWidth,pageHeight)的UIScrollView。然后,将contentOffset.x =(n-1)* pageWidth设置为n = 1,以显示第一页。