天天看点

使用autoLayout布局ScrollView(内嵌多个TableView)的一些小结

实习离职在宿舍,当然也不能闲着,把一些常用的、自己还不太熟悉的东西搞一搞。

首先注意ScrollView的自动布局是特殊的,不仅需要drag一些约束来确定其自身的位置,大小(x, y, width, height),还需要在storyboard中确定其ContentSize的大小。

通常来讲

1.ScrollView没有固定的高度、宽度。一般都是与SuperView发生联系(eg:距离父控件上下左右均为零)

2.ScrollView中内容较多时,为了简化布局,采用化整为零的做法,将原本ScrollView中的多个子View放到一个ContentView(UIView)中,让这个ContentView独自应对外界(ScrollView)的变化,ContentView内部的子View只需要实现普通的约束即可(eg:本例中实现的是左右滑动切换至不同的TableView,共三个TableView)

3.在具体设置ContentView与其父控件ScrollView的约束时,特别需要注意的是,Content View的Width、Height千万不要与ScrollView发生关系(eg:与ScrollView等高、等宽),通常的做法是在无关的外部找一个参照物,让ContentView与其发生Width、Height上的联系。

3.5本例中,contentView需要包含三个水平方向连续的TableView,因此其宽度为屏幕宽度的三倍。在外部找到一个与屏幕等宽的anchor View,设置如下:

Proportional Width t anchor View (MUtiplier 设置为3)

意思是contentView的宽度等于anchor View的三倍,如果发现contentView变成屏幕宽度的0.3了,切换下双方的约束先后位置试试

4.对于第三点,还是想强调一下,由于自动布局需要确定ScrollView的ContentSize,所以Content View的高宽一定要是独立于ScrollView存在的,这样才能正确确定ScrollView的Content Size,否则两者的约束之间互相依赖,就无法正确确定其ContentSize

5.如果TableView的顶部总是多出一块区域,上下滑动一下又没了,这样试试:

self.automaticallyAdjustsScrollViewInsets = NO;

6.特别关注ScrollView的Bounces、Bounce Vertically、Bounce Horizontally这三个属性,在ScrollView中嵌套TableView的过程中,你可能会遇到这些家伙带来的麻烦