UITableView 是iOS開發(fā)中非常常用的一個(gè)控件,今天來做一些我在使用過程中的分享。
1.UITableView的重用機(jī)制
tableView本來就將性能優(yōu)化到很好了,使用重用機(jī)制,不會(huì)大量創(chuàng)建cell,這個(gè)原理在這里就不用多說,大家都知道。
我要說的是,在最近的兩三個(gè)月里,一直都沒用storyboard和xib,因?yàn)閬淼揭患倚鹿?,在這里,所有的約束都是用代碼寫的,還好我說服了大家用masonry,不然那一段段的約束。。。。嘔,天哪!
當(dāng)然,有一個(gè)大牛的同事,他寫的約束我真的是服。比如cell,通過判斷各種參數(shù)就可以通過添加約束搞定不同布局的cell。我真的是望塵莫及,但是,在Apple官方不斷完善storyboard和xib的時(shí)候,我認(rèn)為,還是直接拖控件拖約束更有效率一些,所以,不同樣式的cell,直接做成不同的類就好了。其實(shí)計(jì)算并寫各種約束的時(shí)間,都夠用故事版寫幾個(gè)頁面了。(似乎有點(diǎn)跑題。。??傊褪且欢ㄒ弥赜?,不同布局的cell,就多寫幾個(gè)自定義的cell類就好了。不要浪費(fèi)時(shí)間做約束,不僅自己懵逼,tableView都懵逼了)
2.高度要給明確的返回
tableView的代理方法中,是要先走h(yuǎn)eightForRow 這個(gè)方法,才會(huì)去給cell布局的,所以高度一定要提前給一個(gè)明確的返回。在很久以前,剛學(xué)習(xí)使用tableView的時(shí)候,比較粗心沒有寫這個(gè)方法,整個(gè)tableView都不顯示,那次讓我記住一定要給cell返回明確的高度。
當(dāng)然,cell會(huì)有動(dòng)態(tài)的高度,有時(shí)候只要約束加的好的話,這個(gè)方法可以不寫,能夠正常顯示,但是前提是這個(gè)tableView的cell只是有限的幾個(gè),大概一個(gè)屏幕就可以顯示完,否則,還是乖乖的計(jì)算高度返回吧。
3.盡量減少控件,盡量不要用半透明
繪制控件是需要時(shí)間的,所以能用一個(gè)控件解決的事不要用多個(gè),半透明的顏色不要用,clearColor這樣的顏色就盡量別用了。
4.不要總是傻傻的reload data
- (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection
- (void)insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
- (void)deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
- (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
看這些方法,好好用,比直接無腦的reload data 強(qiáng)多了。
今天想到這幾個(gè)注意的點(diǎn),先寫這么多,以后繼續(xù)補(bǔ)充