2013-09-29 79 views
0

我有定製的包含UITextViews的UITableViewCells。在iOS系統的早期版本中我動態調整表格視圖單元是這樣的:在iOS 7中內容有「 n」個字符時計算UITextView內容大小height

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Get the appropriate content string 
    NSString *sectionKey = [self.orderedSectionKeys objectAtIndex:indexPath.section]; 
    NSDictionary *infoDictionary = [[self.tableViewData objectForKey:sectionKey] objectAtIndex:indexPath.row]; 
    NSString *textViewString = [infoDictionary objectForKey:@"description"]; 

    // Calculate the UITextView height 
    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, kInfoDefaultTableViewCellTextViewWidth, kInfoDefaultTableViewCellTextViewHeight)];   
    textView.font = [UIFont fontWithName:kInfoDefaultTableViewCellTextViewFont 
            size:kInfoDefaultTableViewCellTextViewFontSize]; 
    textView.text = textViewString; 
    [textView layoutSubviews]; // Call this so that the content size is set 

    CGFloat height = textView.contentSize.height;   
    height += kInfoDefaultTableViewCellHeightBuffer; 

    return height; 
} 

這仍然是爲我工作在iOS的7,當TextView的字符串中包含新行之外的字符:\ n。然後contentSize.height太小了,就像它沒有添加新行,而是將\ n視爲字符。在實際的表格視圖中,添加了新行。

有沒有人知道我怎麼能得到適當的高度與新線?我在這個解決方案中嘗試了這種技術:https://stackoverflow.com/a/18818036/472344,但是我得到的結果與我在發佈的代碼中使用的結果相同。

+0

嘗試在該字符串中找到@「\ n」,並將其乘以某個常數高度或某物,因爲您需要。 – Bala

+0

http://stackoverflow.com/a/6111719/1059705 – Bala

+0

謝謝......我一直在玩我的代碼,我已經在解決方案中找到了與工作相關的答案......我'米不知道爲什麼它以前沒有工作。我想你的解決方案也可以工作,但實施起來會有點痛苦。 – Darren

回答

2

將KVO添加到contentSize的textView。然後重新加載該行,如果獲得更改。

[textView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil]; 

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    // Reload your exact row here 
    } 
+0

當你完成後,不要忘記移除Observer。 – capikaw