2014-02-24 72 views
0

我有一個UITableViewCell子類,我正在使用自動佈局,並且我想獲得一個UILabel子視圖的高度,一旦自動佈局過程已完成。UITableViewCell獲取子視圖高度與自動佈局

我試過layoutSubviews並獲得我的UILabelframe屬性,但這似乎是標籤在回收之前的舊高度。

然後我試圖覆蓋layoutIfNeeded但我發現它從未被調用。

一旦自動佈局完成並且約束已經被應用,我怎樣才能獲得我的UITableViewCell子視圖的框架?當然這應該很簡單!

+0

「試過layoutSubviews」引用表格單元格的layoutSubviews方法嗎? – bilobatum

+0

這是正確的! –

回答

0

假設標籤是表格單元格內容視圖的直接子視圖,那麼我的問題是您可以訪問表格單元格內容視圖的layoutSubviews方法中標籤界限的最終屏幕值(而不是表格單元本身的layoutSubviews方法)。

但是,如果你的標籤是不是多行,然後簡單地從它的attributedText財產隨時抓住標籤的高度如下:

NSAttributedString *attrString = label.attributedText; 
CGFloat labelHeight = ceilf(attrString.size.height); 

或者,您可以使用標籤的font屬性來確定標籤的高度(同樣,只有當標籤是不是多行):

UIFont *font = label.font; 
CGFloat labelHeight = ceilf(font.lineHeight); 

如果您的標籤是多行,則計算行高度最好的選擇如下:

// but you have to know the label's width 
CGFloat labelWidth = … 
NSAttributedString *attrString = label.attributedText; 
CGRect rect = [attrString boundingRectWithSize:CGSizeMake(labelWidth, FLT_MAX) options:NSStringDrawingUsesLineFragmentOrigin context:nil]; 
CGFloat labelHeight = ceilf(rect.size.height); 

您將手動計算標籤的寬度。通常它是主視圖的邊界寬度減去水平間距邊界的一些固定量。

相關問題