我正在編寫基於TableView的通用iOS應用程序(iPhone & iPad)。每個單元格都有多個文本區域,我需要根據內容調整高度。我定義了Storyboard中的所有表格和單元格,並且我非常希望以這種方式保留它(通過圖形查看將會如何更容易地使用它)。在UITableViewCell中對單元格進行復雜大小調整
問題是,我需要大量的信息來計算單元格的最終大小(單元格和子視圖,標籤寬度,字體大小的故事板高度)。我以前只是在我的代碼常量在那裏我會手工編寫的值,但是:
- 這是改變我每次做腳本改變
- 我的標籤可以有不同的寬度(不同類型的細胞時有疼痛感,iPhone/iPad的),我有很多人因此在這種情況下,這真是一噸常數的跟蹤
我使用的解決方案:
在單元格我有設置靜態變量一次要記住尺寸(它是從故事板獲取的所以這是很好的):
static float cellDefaultHeight;
static float contactsLabelDefaultHeight;
static float contactsLabelDefaultWidth;
static float contactsLabelFontSize;
-(void) awakeFromNib
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// instantiate static variables with the constants
cellDefaultHeight = self.contentView.bounds.size.height;
contactsLabelDefaultHeight = self.contacts.bounds.size.height;
contactsLabelDefaultWidth = self.contacts.bounds.size.width;
contactsLabelFontSize = self.contacts.font.pointSize;
});
}
+ (CGFloat) heightForCellWithData:(NSDictionary *)data
{
// use constants and data to compute the height
return height
}
在表計算任何單元格大小之前,我必須實例化一個設置靜態變量:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get one instance before any size computation
// or the constant won't be there
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
static NSString *CellIdentifier = @"identifier";
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
});
return [MyCell heightForCellWithData:theData];
}
感覺如此的hackish我覺得我完全失去了一些東西,但我想不出別的。有沒有一個好的方法來做到這一點?
謝謝!
這是你陳述的原因的最佳方式。 –