我有两个关于ScrollView的问题。一个是我的主要问题,另一个是次要的混乱。
1. contentOffset
的{{1}}和contentInset
究竟是什么?我将在下面提供更多详情。
2.我创建了一个ScrollView
,但似乎ScrollView
无法向任何方向滚动。这是关于偏移的问题吗?还是插图?我将在下面提供更多详情。
问题1的详细信息:
有时ScrollView
属性和contentOffset
属性似乎有很多区别,但是当我尝试实现与这两个属性相关的一些函数时,我感到困惑。
我在这里做一个简单的说明。你能帮我弄清楚哪个部分是偏移的,哪个部分是插入的?
问题2的详细信息:
我使用以下功能添加contentInset
ScrollView
它无法滚动。它只能包含很少的东西(Buttons或TextFields ......)来填充它的大小,而不是把更多的东西放在我们看不到的地方。
关于开始设置的问题也是如此。插图?我该如何解决此问题?如果我这样做,我怎么能以编程方式将东西(按钮......)添加到未显示的位置?
我希望你能告诉我一些事情!
答案 0 :(得分:47)
一些观察结果:
contentOffset
是用户当前在滚动视图中滚动的位置。这显然会随着用户滚动而改变。您通常不会以编程方式更改此项(除非您想以编程方式在某处滚动,例如,使用按钮滚动到顶部)。
contentInset
是滚动视图中内容在视觉上嵌入的程度(即滚动视图中的“边距”)。您通常在IB或viewDidLoad
中设置一次,因为滚动视图已实例化。
contentSize
是可滚动内容的大小。请注意,使用autolayout时,您不必手动指定,而是通过在滚动视图及其子视图之间指定的约束(以及子视图的约束和子视图之间的约束)计算。
要使滚动正常工作,它是(a)滚动视图的bounds
的组合,少于任何contentInset
; (b)contentSize
,根据子视图的约束为你计算。
答案 1 :(得分:8)
contentOffset
表示滚动视图内容的当前位置,相对于左上角的原点坐标。除非您想以编程方式调整滚动位置,否则不应以编程方式设置此值。
contentInset
允许在scrollview中指定内容周围的边距。您可以按编程方式指定边距:
scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0)
答案 2 :(得分:0)
问题很古老,但是关于第二个问题,您应该使用contentSize而不是offset和inset。
let contentWidth = 400 //or any other value that suits you
let contentHeight = 50
scrollView.contentSize = CGSize(width: contentWidth, height: contentHeight)
如果内容小于任一维度,则将根据比例垂直或水平滚动。
致谢