2017-09-16 151 views
0

我需要非常簡單的事情 - 表格單元格自動檢測自己的高度。這裏有很多例子,基本上都是這樣說的:「在桌子上設置幾個標誌和值,並在你的單元格中使用自動佈局」。我的情況有點特別 - 我從單獨的XIB文件加載單元格的內容,這是一個普通的UIView。第一個問題是當我在界面構建器中創建XIB文件時 - 我不知道如何根據我指定的約束使它成爲「計算」的高度。我總是收到IB錯誤,除非我切換到「自由格式」並將視圖調整到與我的約束條件相匹配的高度。如果我不這樣做,我會得到以下錯誤:iOS版表格視圖單元格自動高度自定義的子視圖

enter image description here

在上述例子中我只需要其高度將是32(圖像高度)的圖+ 2 * 16(垂直距離約束來自父母的頂部和底部的圖像)加上邊距。調整在IB的自由視圖,直到錯誤消失似乎是一個骯髒的黑客對我來說,這其實並沒有自動佈局。作爲下一個步驟,我定義了一個電池類,在這裏我把這個廈門國際銀行看來,這樣的事情(抱歉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魔法?

回答

0

我發現了什麼是我的問題。實際上,由於自動調整,與添加的約束存在衝突。所以我改變了這條線(從上面的問題):

self.contentView.translatesAutoresizingMaskIntoConstraints = NO; 

到:

self.content.translatesAutoresizingMaskIntoConstraints = NO; 

愚蠢的錯誤,translatesAutoresizingMaskIntoConstraints標誌應爲孩子視圖添加後被禁止,不爲父母看法,因爲我錯誤地做了。之後,具有細胞自動檢測功能的魔法開始像魅力一樣工作。

0
  1. 請確保UILabel具有多行屬性。所以,設置0Line PropertyAttribute Inspector
  2. 確保UILabelAuto-Layout正確地相對於Left-Right-Top-Bottom
  3. 應用這些委託功能:

    -(CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

    { 
    
        return UITableViewAutomaticDimension; 
    } 
    
    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    
        return UITableViewAutomaticDimension; 
    } 
    
相關問題