談談tableView的重要屬性內邊距


全屏穿透效果需要做到兩點
  1. tableView的可視范圍占據整個父控件(或者屏幕)--設置contentsize滾動范圍。
  2. 所有的cell都可以被看到,也就是說tableView中的cell不會被導航欄,titleView以及TabBar所遮擋--設置contentInset內邊距。

例如:首頁控制器的view的第一個子控件是scrollView(添加子控制器視圖tableview),而且首頁控制器包裹了導航控制器和TabBarController,所以,scrollView的內容上邊被擠下來64,下邊被擠上去49.

解決方案
  1. 可視范圍:
    2. 告訴系統不要自動調整scrollView的內邊距
    3. 首頁控制器:
automaticallyAdjustsScrollViewInsets = NO;

經過這個,ScrollView的內容(tableView)確實上移了,但是還是預留了20,這個是時候通過打印知道tableView的y值是20,height = 667 - 20 = 647;
4. 設置tableView的 y = 0.
5. 設置tableView的height = scrollView.height;
這個時候就實現了tableView的可視范圍為整個scrollView.換句話說tableView和scrollView完全重合.

但是
新的問題出現了:新的問題出現了:這個時候的tableView和scrollView完全重合,tableView中的內容(在這里是cell,如果有tableHeaderView的話就包括tableHeaderView)和tableview完全重合.那么就會有一部分cell被導航控制器以及titleView擋住.當下拉下來以后,松手就由彈上去了.內容被遮擋.同樣底部也會被TabBar擋住

  1. 不被導航遮住內容:
    解決方案:給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的重要屬性內邊距

1. 主要概念

2.
a.沒有cell
b.沒有contentInset
c.沒有tableHeaderView、tableFooterView

3.
a.沒有cell
b.沒有contentInset
c.有tableHeaderView、tableFooterView

4.
a.有cell
b.沒有contentInset
c.沒有tableHeaderView、tableFooterView

5.
a.有cell
b.有contentInset
c.沒有tableHeaderView、tableFooterView

6.
a.有cell
b.沒有contentInset
c.有tableHeaderView、tableFooterView

7.
a.有cell
b.有contentInset
c.有tableHeaderView、tableFooterView

8.
a.有cell
b.沒有contentInset
c.沒有tableHeaderView、tableFooterView
d.有額外子控件{0,-40,375,40}

9.
a.有cell
b.沒contentInset
c.沒有tableHeaderView、tableFooterView
d.有額外子控件{0,-40,375,40}

10.
a.有cell
b.沒有contentInset
c.有tableHeaderView、tableFooterView
d.有額外子控件{0,-40,375,40}

11.
a.有cell
b.有contentInset
c.有tableHeaderView、tableFooterView
d.有額外子控件{0,-40,375,40}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM