cocoStudio:ScrollView控件使用记录(2)

来源:互联网 发布:mysql函数大全 编辑:程序博客网 时间:2024/04/30 02:19
cocoStudio:ScrollView控件使用记录(2)

在上一篇文章中已经分析了使用ScrollView的一些问题,那么这一篇提供一些解决方案:
1、
默认情况下scrollView的滚动区域大小和scrollView的大小(可视区域)相同,
我们可以通过getInnerContainerSize方法获取滚动区域大小,然后把我们的子控件
从上往下加即第一个控件坐标getInnerContainerSize.height,
第二个控件位置为getInnerContainerSize.height
减去一个值,下面的控件坐标就依次往下递减,这里只考虑Y轴方向,然后根据所添加的所有控件
计算出一个高度,然后通过setInnerContainerSize函数,设置ScrollView滚动区域的大小,如果添加的控件
高度大于最初的滚动区域高度,就不行,如果不大于,就可以。
针对大于按照上面方法不行的这种情况,我们可以根据添加的控件高度和原始滚动区域高度计算一个偏移量Offset,
然后把我们添加到scrollView中所有的子控件Y方向坐标加上这个偏移。然后使用setInnerContainerSize
方法把scrollView的大小设置为我们实际添加的所有子控件高度。
注:我们这里假设scrollView的滚动区域大小和scrollView的大小(可视区域)相同,在使用过程中我就遇到
因为这个导致显示位置不正确的情况,因为我的scrollView中的内容需要根据级别显示不同的内容,开始时
我只是把scrollView中的子控件都移除了,但是并没有改变InnerContainerSize即滚动区域大小,所以
再次添加新的内容时,scrollView滚动区域大小仍然是上一次我们设置的大小,这样就会导致计算偏移量不对,
所以我们要在重新添加新的内容之前,把滚动区域大小设置为可视区域大小。
    local scrollViewSize = scrollView:getContentSize()
    scrollView:setInnerContainerSize(scrollViewSize)

2、
我们可以在添加scrollView内容之前,先根据添加内容的个数,每个Item的大小,还有间距,
计算出scrollView的滚动区域大小,然后在使用上面的方法进行添加,这种比较适合那种每个
item高度相同并且确定的情况,如邮件中的每封邮件,其实这里的scrollView是当成了listview
使用。
注:使用这种方式有一点需要注意,就是如果内容的高度小于scrollView的大小,这里即使设置
滚动区域大小也是没有意义,因为可视区域大小最小等于scrollView大小,
这里也是默认scrollView的滚动区域和scrollView的大小相同,这种情况计算每个Item的位置时,
最好使用scrollView的滚动区域大小为基准。

3、
我们可以在cocoStudio中把scrollView的滚动区域大小设置为一个很大的值,也就是根本达不到的
值,然后根据1的方法计算一个偏移量,这里偏移量的计算方式不同,不过思路相同。

4、
采用倒序添加的方式,如邮件系统,先把最后一封邮件添加在0的位置,我们只考虑Y轴方向,
然后倒数第二封邮件添加到最后一封邮件的上面,依次类推,添加完成后,在根据内容设置滚动
区域大小。
注:这里也有一个问题,就是如果内容的高度小于scrollView的高度,那么就会出现
邮件靠近底部显示,而不是靠近顶部显示,也是要计算一个偏移量。


总结:
其实上面提供的所有方法都是因为scrollView内部的滚动层的锚点是0,0,而且滚动层内容必须
靠顶部显示,而且只有在0之上的内容才可以看到,而且上面提供的方案都只是针对上下
滚动的情况,没有考虑横向滚动。
1 0