2013-07-17 63 views
1

我正在編寫基於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我覺得我完全失去了一些東西,但我想不出別的。有沒有一個好的方法來做到這一點?

謝謝!

+0

這是你陳述的原因的最佳方式。 –

回答

0

首先,我認爲你應該使用自定義單元來做這樣的事情。現在每次如果您需要更改寬度/高度,您只需要該單元格的邊界。關於標籤和文本字段的寬度/高度,您可以像(self.textview.bounds)那樣做,然後您可以根據需要設置偏移量。這不是破解,而是根據邏輯進行純編碼,因爲每次更換設備時都會相應地取出界限,因此不需要記住任何內容。 希望這項工作:)

相關問題