首先,这真是个挺蛋疼的问题。
UIScrollView,即可滚动视图。我参考的书上关于UIScrollView的讲解并不多,只是三言两语再加一个小例子。
但是在根据例子做完之后发现,它竟然滚不起来。contentSize属性的值我也按照书上的方法设置了,又怀疑值设得不够大改了又改,还是没用。Attributes inspector里面找看着像的地方选上或是取消勾选,也还是没用……
然后。。。我猜测是版本的原因,因为书讲的是iOS5,而我用的是6.1的sdk。于是去查UIScrollView的文档,但是没找到有关的信息。
怎么办呢真捉急。。。
后来。。。已经忘了当时是怎么发现问题所在的了,大概是在摆弄ScrollView里面子视图(一个Button,该Button在可视区域外)的位置时,看到它的Size inspector中有个地方挺奇怪的(下图),这里的值是一个负数。
当时还不大明白具体是什么意思,选择编辑之后,Utilities面板上如下面左图所示。
我选中Standard复选框,Constant后面即显示“Auto”(再取消选中则变成20)。然后我试着运行,居然可以滚动了!
原来这个地方是视图与视图、视图与父视图之间的约束(Constraint),可实现自动布局(Auto Layout)。在这里,“Bottom Space to:Superview Equals:-59.000000”表示该Button与ScrollView的Bottom之间的距离固定为-59(根据我自己的理解,这里ScrollView的Bottom应该指其实际的Height,而不是在Interface Builder中可视的Height)。而这个约束正好使ScrollView的Height和Bottom相等了,所以在运行的时候就无法滚动了,即使设置了contentSize。
我又IB中反复折腾了多次,约束这玩意儿实在是飘忽不定。看Apple的文档也是看得一知半解。先按下不表吧,整明白了再说。
Auto Layout是Xcode4.1加入的新特性,貌似iOS 6之前不支持。如果嫌它麻烦的话可以不用它(File inspector中可选),对于ScrollView的问题倒也省心,哈哈。
(最后,以上有理解不对的地方,还请指正,谢谢!)