前提:
1.控制器的view是默認占據整個屏幕
?2.scrollview默認位置大小都為0,要占據整個屏幕,frame應該等于self.view.bounds
?3.這里的scrollview既指普通的scrollview也指tableview
?4.主要分析scrollview上面加多個tableview的結構
原則:
1.scrollview或者tableview一旦占據了整個屏幕,如果前面有導航條,系統會自動設置一個64的內邊距,將內容視圖下調64,內容位置發生變化
2.就算scrollview身上已經加了一個tableview,手動設置frame為全屏,這個tableview也會隨著內容視圖的改變而改變,因為tableview實質上是加到內容視圖上的,也就是說系統不管你有沒有手動設置子視圖的frame,它是自動話判定,一遇到這種情況,就會自動調整
3.這樣的調整是當前控制器對象內部通過一個屬性自動調整scrolllview的內邊距automaticallyAdjustsScrollViewInsets=YES進行調整的,注意這個屬性是控制器對象的,而不是scrollview或者tableview的
調整后的優點與缺點:
優點:scrollview中的內容不再被導航條擋住
缺點:如果在scrollview上加了tableview后,tableview就會被壓縮區域,內容的上下滾動,只能在限定的區域內移動,無法穿透整個導航條
注意:這里是討論控制器view上加了scrollview,scrollview上右加了tableview,下調64,導致tableview隨著下調,從而cell無法穿過導航欄,如果只是在控制器view上加了tableview,就不需要考慮這種情況
取消自動調整:
如何取消系統對scrollview或者tableview的自動調整呢?
self.automaticallyAdjustsScrollViewInsets = NO
此時內邊距為0,這樣tableview就可以設置frame占據整個屏幕,不會發生變化,cell也能通過導航欄
必須設置它的frame
如何設置frame呢?
y為0,寬高均為scrollview的寬高