你真的會用UITableView嘛

2022-05-31 22:03:14 字數 3363 閱讀 2127

uitableview是工程開發中最經常使用到的ui控制項,但是你真的了解它嘛,這裡記錄幾點有用的但你可能並不知道的。

1 self.tableview.tablefooterview = [[uiview alloc]init];
1 self.tableview.separatorinset = uiedgeinsetszero;
但是你很快就會發現這麼做並沒有效果,這是因為separatorinset這個屬性在ios7以後就已經失效了,但是我們還是能夠達到同樣的效果,你可以在你的tablevview的**協議實現介面加上下面這段**:

1/**

2* 分割線頂頭3*/

4 -(void

)viewdidlayoutsubviews59

10if

([self.tableview respondstoselector:@selector(setlayoutmargins:)]) 13}

14 -(void)tableview:(uitableview *)tableview willdisplaycell:(uitableviewcell *)cell forrowatindexpath:(nsindexpath *)indexpath

1519

if([cell respondstoselector:@selector(setlayoutmargins:)])

22 }

再次執行,好了我們的uitableview終於頂頭顯示分割線了。

– 很多情況下我們的uitableviewcell的高度是動態不確定的,比如說很多聊天的介面都需要我們去動態的計算cell的高度,你可能會在heightforrowatindexpath**協議方法中返回你計算好的cell高度,然後在蘋果推出約束以後,我們其實有更加方便的方法去實現相同的效果。你可以嘗試在你的**中加入以下兩行**:

1 self.tableview.estimatedrowheight = 68.0

;2 self.tableview.rowheight = uitableviewautomaticdimension;

再次執行你的程式,其實你發現了好像你的cell並沒有動態的返回高度,這是因為上面說了,這兩行**必須配合約束來使用。

我們拖出乙個sb,然後在cell上放上乙個label,講label的numberoflines屬性設定為0,然後設定好label的上下左右約束,然後再對label的內容進行賦值,再次執行你的程式,這個時候你的cell就會動態的顯示高度了,label的高度取決於你的內容的多少,同時按照你的約束進行顯示。

-你可能寫過這樣下面這樣的**

1 -(void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath
用乙個動畫來刪除某乙個cell,其中有兩行**特別有意思:

1

[tableview beginupdates];

2 [tableview endupdates];

這倆吧其實和[tableview reloaddata]作用類似,但是這倆貨卻能非常輕鬆的創造出不錯的效果,比如說和我們上一點說的用約束來控制label的行高相結合的是的時候,我們先來看一下效果:

其實我的**很少,核心**只有以下幾行:

1 -(void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpathelse

11[tableview endupdates];

12 }

我用sb建立了乙個uitableview,然後在cell上放置了乙個label,初始化label 的numberoflines然後在介面上設定tableview

1 self.tableview.estimatedrowheight = 68.0

;2 self.tableview.rowheight = uitableviewautomaticdimension;

然後在他的點選動作中改變label的numberoflines,同時結合使用:

1

[tableview beginupdates];

2 [tableview endupdates];

像上面po出來的**那樣,這個時候你如果使用[tableview reloaddata]也能夠達到改變cell高度的效果,但是介面上就不會有使用[tableview beginupdates]那麼流暢,以此類推,其實在很多地方都可以用[tableview beginupdates]來代替[tableview reloaddata]來達到更好的效果.

– 你可能會經常忽略uitableview的一些屬性和**,必須下面這個方法:

1 -(void)tableview:(uitableview *)tableview willdisplaycell:(uitableviewcell *)cell forrowatindexpath:(nsindexpath *)indexpath

6 cgrect oldrect =cell.frame;

7 cgrect newrect =cell.frame;

8 newrect.origin.x += 50

;9 cell.frame =newrect;

10 [uiview animatewithduration:0.5 animations:^];

13 }

如果你這麼寫會簡單的有乙個展示的動畫,這個**就是在cell展示到螢幕的時候發起的動作。

還有這個屬性:tableview.visiblecells,你的產品經理可能會要求你的cell在滾動的時候進行一些展示類的動畫—-滾動的時候進行展開收起之類的,這樣的話你可以這麼做:

1 -(void)scrollviewdidscroll:(uiscrollview *)scrollview

8 }

這個屬性會返回即將展示到螢幕上的cell,而放在這個滾動的回掉中你就可以對你的cell進行不停的調整了,具體能做出什麼動畫,就靠你的想象能力了。

– tableview可能會造成你的controller過於龐大,或許你可以使用mvvm類似的構架來**你的controller。。。。。。

你真的會用strong weak dance嗎?

下文的討論基於arc 平時開發中我們遇到block裡面引用self的情況,大部分都是這樣處理的 weak typeof self weakself self self.myblock 複製 我們習慣了這樣用,貌似這樣用了之後可以解決迴圈引用的問題,而且可以保證block執行之前self不會被釋放掉?...

你真的會用GOOGLE嗎

平時很多人用google搜尋引擎搜尋資訊,經常搜尋 成千上萬的網頁,檢視幾頁就沒耐心找下去了。在google上搜尋資訊,不只輸入希望搜尋的片語這麼簡單,這樣是無法得到做好的搜尋結果的。google 為使用者提供了很多基本搜尋語法,熟練的運用google搜尋,將很快的搜到我們需要的結果。短語搜尋 布林...

Markdown 你真的會用嗎?

markdown指南 markdown basics 我有幾張阿里雲幸運券分享給你,用券購買或者公升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,馬上就要搶光了。我常用如 橫線分隔符 超級鏈結 markdown 常遇到的問題 縮排 每段文章我都會習慣性地做首行縮排,但如果直...