簡體   English   中英

iOS表格視圖具有自定義子視圖的單元格自動高度

[英]iOS table view cell auto height with custom subview

我需要非常簡單的東西-表格單元格可以自動檢測其自身的高度。 這里有很多示例,這些示例基本上說“在表上設置幾個標志和值,並在單元格中使用自動布局”。 我的情況有點特殊-我從單獨的XIB文件(即普通的UIView)加載單元格的內容。 當我在界面構建器中創建該XIB文件時,第一個問題已經出現-我不知道如何根據我指定的約束條件使其高度來“計算”。 除非切換到“自由格式”並將視圖的大小調整到與我的約束匹配的高度,否則我總是會出現IB錯誤。 如果我不這樣做,將會出現以下錯誤:

在此處輸入圖片說明

在上面的示例中,我只需要一個視圖,該視圖的高度將為32(圖像高度)+ 2 * 16(圖像距父對象頂部和底部的垂直距離約束)加上頁邊距。 在IB中調整自由格式視圖的大小,直到錯誤消失,對我來說似乎是一個骯臟的技巧,並且實際上不是自動布局。 下一步,我定義一個單元格類,在其中放置這個xib視圖(類似於objc代碼,將項目移植到swift幾乎完成了)

- (void)awakeFromNib {
    [super awakeFromNib];

    [[NSBundle mainBundle] loadNibNamed:@"CellContent" owner:self options:nil];

    // self.content is an outlet which gets the root of the XIB on load
    [self.contentView addSubview:self.content];

    self.contentView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.contentView.leftAnchor constraintEqualToAnchor:self.content.leftAnchor].active = YES;
    [self.contentView.rightAnchor constraintEqualToAnchor:self.content.rightAnchor].active = YES;
    [self.contentView.topAnchor constraintEqualToAnchor:self.content.topAnchor].active = YES;
    [self.contentView.bottomAnchor constraintEqualToAnchor:self.content.bottomAnchor].active = YES;
}

您可能會猜到,當我運行此程序時,像元高度是較大的自由格式,就像在內容XIB的IB中一樣,因此沒有自動布局。 似乎自由形式的高度甚至被添加為另一個約束,並且存在約束沖突,導致其中一些在運行時被破壞。

讓我知道如何解決此問題,輕松地為具有自動高度的單元格創建內容視圖,並且可以將其嵌入到單元格中,以使tableView.rowHeight = UITableViewAutomaticDimension魔術受益匪淺?

也許您忘記設置標簽的“ 內容擁抱優先級”和“ 內容壓縮保留優先級 ”。 在此處輸入圖片說明

  1. 確保UILabel具有multiline屬性。 因此,在Attribute Inspector Line Property設置為0
  2. 確保UILabel Auto-Layout相對於Left-Right-Top-Bottom
  3. 應用這些委托函數:

     -(CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; } 

我發現了我的問題所在。 實際上,由於自動調整大小,添加的約束存在沖突。 所以我改變了這一行(從上面的問題):

self.contentView.translatesAutoresizingMaskIntoConstraints = NO;

至:

self.content.translatesAutoresizingMaskIntoConstraints = NO;

愚蠢的錯誤,應該在添加后為視圖(而不是父視圖)禁用translatesAutoresizingMaskIntoConstraints標志,而不是像我錯誤地那樣。 此后,具有單元格自動高度檢測功能的魔術開始像魅力一樣起作用。

暫無
暫無

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

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