簡體   English   中英

具有動態高度的UITableViewCell中的UILabel

[英]UILabel in a UITableViewCell With Dynamic Height

我在UITableView中實現了動態行高的一些問題 - 但它不是我遇到問題的單元格,它是單元格內部的UILabel。

單元格只包含一個UILabel來顯示文本。 我的tableView:heightForRowAtIndexPath:通過使用NSString的sizeWithFont:方法計算將在其中的標簽的高度來正確調整每個單元格的大小。

我有一個UITableViewCell的子類,它只保存連接在storyboard中的UILabel屬性。 在故事板中,我將其行設置為0,因此它將使用盡可能多的行,並將其lineBreak設置為Word Wrap。

以下是我設置單元格的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath
{
    ExpandCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"  forIndexPath:indexPath];

   SomeObject *object = self.tableObjects[index.row];

    cell.myLabel.text = [object cellText];

    [cell.myLabel sizeToFit];

    return cell;
}

當我構建這個時,我得到了我的表格視圖,其中單元格的大小均為其內容的正確高度,但標簽都是1行,只是在單元格的一側運行。 但是,如果我滾動表格讓單元格離開屏幕,然后滾動回到它們,它們的標簽將正確調整大小,單元格將看起來我最初的預期。

我也嘗試用我正在計算行高的相同方法計算標簽框架,並且我得到相同的行為 - 它不會正確繪制,直到它滾出屏幕再重新開啟。

我找到了兩種方法來解決這個問題,這兩種解決方案都不是可接受的。

首先,如果在viewDidAppear中:我在tableview上調用reloadData,單元格和標簽第一次正確繪制。 這對我的情況不起作用,因為我將添加和刪除此表中的單元格,並且我不希望每次添加單元格時都調用reloadData。

第二種解決方法對我來說似乎很奇怪 - 如果我將字體設置保留在UILabel上的默認系統字體17中,則單元格會自行繪制。 一旦我改變了字體大小,它就會恢復到它沒有正確繪制標簽的行為,直到它離開屏幕並返回,或者在tableView上調用reloadData。

我很感激任何幫助。

我最終通過在cellForRowAtIndexPath中分配/初始化標簽來解決這個問題。 我不完全確定為什么這是一個解決方案 - 但是我遇到的問題似乎與故事板(或者何時?)在單元格中創建對象有關。 如果我在cellForRowAtIndexPath中的單元格中分配/初始化標簽,則所有內容都會正確加載和調整大小。

所以...我當前的解決方法是檢查單元格中是否有自定義標簽。 如果沒有,我分配/初始化標簽並將其放入單元格中。 如果它確實有一個,就像它已經出列的單元格一樣,那么我只需在已存在的標簽中設置文本。

不確定它是否是最好的解決方案,但它現在仍在使用。

我最終通過取消選中IB中的AutoSizing復選框來解決此問題。 目前還不清楚為什么自動布局導致了這個問題。

我遇到了同樣的問題,最后通過在返回單元格之前調用[cell layoutIfNeeded]來解決它

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath {
ExpandCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"  forIndexPath:indexPath];
SomeObject *object = self.tableObjects[index.row];

cell.myLabel.text = [object cellText];

[cell layoutIfNeeded];

return cell; }

暫無
暫無

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

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