在iOS 7中,当内容具有“\ n”字符时,计算UITextView内容大小高度

时间:2013-09-29 23:40:28

标签: ios uitableview uitextview ios7

我有包含UITextViews的自定义UITableViewCells。在iOS的早期版本中,我动态调整了表视图单元格的大小:

- (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,但是我得到的结果与我在发布的代码中使用的结果相同。

1 个答案:

答案 0 :(得分:2)

将kVO添加到textView的contentView中。如果获得了更改,则重新加载该行。

  [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
  }