簡體   English   中英

iOS-UITableViewCell以編程方式還是在IB中?

[英]ios - UITableViewCell programmatically or in IB?

首先,我要說的是我對表視圖的性能很感興趣,因為每個單元格都會有很多數據。

我想知道的是,以編程方式或使用“接口”構建器構建tableView單元是一個更好的主意嗎? 他們各有利弊嗎?

在IB中設計和調整單元格當然更容易。 如果在性能方面存在任何差異,則只要您按照建議的方式重復使用單元,就不太可能引起注意。 如果要重復使用單元,則只會創建少量的單元。 無論您是以編程方式創建單元還是從筆尖加載單元,都應絕對執行此操作。

在代碼中,有些事情比在IB中更容易完成,並且您可能需要在代碼中做一些事情。 當您遇到這些情況之一時,您就會知道它。 即使這樣,您始終可以采用混合方法-從筆尖加載細胞,然后根據需要進行編程修改。

如果UITableViewCell中有很多UILabel,則性能可能會受到影響。

嘗試將IB中的單元格放在一起,確保IB中的單元格標識符與代碼中要出隊的單元格標識符匹配。

還要確保所有標簽都設置為不透明,因為這將有助於提高性能。

完成所有這些操作后,對設備上的CoreAnimation儀器進行分析,然后嘗試滾動表。 滾動時會得到FPS讀數-20 FPS有點斷斷續續,但可以接受,遠低於這確實是斷斷續續的。 目標為30FPS或更高。

如果性能不佳,或者由於使用的背景而必須具有透明標簽,請考慮使用混合方法。 在IB中設計單元格,但不要使用該XIB文件,而應使用代碼中的模板作為模板。

這意味着:

1)在單元格創建時,在單元格的layoutSubviews中,將xib中的UITableViewCell的一個實例讀取到靜態變量中。

2)如果您以iOS 3.2或更高版本為目標,則為XIB中的每個標簽在同一位置創建一個CATextLayer,並使用與該標簽相同的字體(CATextLayers將更快地渲染)。

3)如果目標是3.1或更高版本(除非您發狂,否則目標不得低於3.0),則在單元格的drawRect內在模板標簽中指定的位置繪制單元格的所有文本。

通常,如果正確地重用單元格,則使標簽不透明可能就足夠了(檢查以確保它們像您期望的那樣出列)。

聽起來您最好以編程方式構建單元。 通過IB可以使用的定制不多。 通過編程,您可以做更多的事情。 這些都是關於各自的優缺點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM