2011-06-26 71 views
1

我有我的自定義UITableViewCell與UITextView中。 加載UITableView後,我需要調整UITableViewCell的大小與UITextView中的文本的大小。 所以我想這樣的:從UITableViewCell獲取大小UITextView?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 
    { 
     CGFloat resHeigth; 

     resHeigth = MyCell.textView.contentSize.height; 
     resHeigth += TOP_BOTTOM_MARGINS * 2; 

     return resHeigth; 
    } 

但heightForRowAtIndexPath的cellForRowAtIndexPath,在那裏我居然設置文本之前調用。

MyViewCell *cell = (MyViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1]; 

    if (cell == nil) { 

     [[NSBundle mainBundle] loadNibNamed:@"MyCellView" owner:self options:nil]; 
     cell = MyCell; 
    } 

    cell.textView.text = @"Text for test\nTest"; 

    CGRect frame = cell.textView.frame; 
    frame.size.height = cell.textView.contentSize.height; 
    cell.textView.frame = frame; 

所以,是否有可能改變UITableViewCell的高度?

回答

0

如果您有可用的NSString文本,那麼您可以使用NSString的實例方法sizeWithFont:constrainedToSize:lineBreakMode:來衡量此字符串將採取的大小。使用該方法,您可以在heightForRowAtIndexPath方法中設置單元格高度。

更新: 在constrainedToSize參數中,您可以將高度設置爲非常高的值(可能是int max或屏幕高度),因此它會返回此字符串所採用的全高。

+0

此方法簡化版,工作校正的UITextView

CGSize sz = [yourText sizeWithFont:cellTextFont constrainedToSize:CGSizeMake(textFieldWidth,CGFLOAT_MAX); 

將返回的文本的大小。它只適用於UILabel –

+0

我認爲UITextView和UILabel之間沒有區別,前者有一個滾動容器。 sizeWithFont方法是通用的,你應該使用寬度確定的'sizeWithFont:forWidth:lineBreakMode:'方法。 –

+0

請看看那個鏈接 http://stackoverflow.com/questions/2330939/sizewithfont-doesnt-give- 正確的高度爲uitextview如果有一個長字符串 我試過了但它不起作用 –

0

使用NSString UIKit Additions中的方法計算文本的大小。當constrainted到一個固定的大小和垂直uncontrainted(CGFLOAT_MAX爲浮點數的最大值)

+0

此方法對UITextView不起作用。它只適用於UILabel。但我需要UITableView –

+0

它的工作原理完全相同。只要您使用爲多行文本設計的正確方法(而不是單行,請參閱文檔)。 UITextView以與UILabel相同的方式呈現文本,除了它是可編輯的並且嵌入在滾動視圖中。 – AliSoftware

+0

我剛剛嘗試,它不正確工作。這裏是另一個帖子關於這個問題: http://stackoverflow.com/questions/3141399/calculate-the-height-of-a-uitextviews-text-with-sizewithfontconstrainedtosizel 如果可能的話,請創建示例項目 –

相關問題