全屏穿透效果需要做到兩點
1.tableView的可視范圍占據整個父控件(或者屏幕)--設置contentsize滾動范圍。
2.所有的cell都可以被看到,也就是說tableView中的cell不會被導航欄,titleView以及TabBar所遮擋--設置contentInset內邊距。
例如:首頁控制器的view的第一個子控件是scrollView(添加子控制器視圖tableview),而且首頁控制器包裹了導航控制器和TabBarController,所以,scrollView的內容上邊被擠下來64,下邊被擠上去49.
解決方案:
1.可視范圍:
? 1.1 告訴系統不要自動調整scrollView的內邊距
首頁控制器:
automaticallyAdjustsScrollViewInsets = NO;
經過這個操作,scrollView的內容(tableView)確實上移了,但是還是預留除了20,這個時候通過打印知道tableView的y值為20,height = 667-20 = 647;
1.2.設置tableView的
tableView.y = 0.
1.3.設置tableView的
tableView.height = scrollView.height;
這個時候就實現了tableView的可視范圍為整個scrollView.換句話說tableView和scrollView完全重合.
但是:
新的問題出現了:這個時候的tableView和scrollView完全重合,tableView中的內容(在這里是cell,如果有tableHeaderView的話就包括tableHeaderView)和tableview完全重合.那么就會有一部分cell被導航控制器以及titleView擋住.當下拉下來以后,松手就由彈上去了.內容被遮擋.同樣底部也會被TabBar擋住
2.不被導航欄遮住內容:
解決方案:給tableView增加額外的滾動區域,即設置內邊距,其中上邊設置64(導航條高度)+35(titleView的高度),下邊設置49(TabBar高度)
具體代碼:
scrollView.contentInset = UIEdgeInsetsMake(64 + 35, 0, 49, 0);
到現在為止完成了所有步驟:
1.通過改變tableView的frame --以及讓系統不要自動調整scrollView的內邊距讓tableView的可視范圍為占據整個scrollView
2.通過設置tableView的內邊距,讓tableView中的所有cell都可以顯示,即往下走一個導航欄的高度.
以前介紹tableView的重要屬性內邊距