UITableViewCell,具有动态高度的UITextView

时间:2011-02-03 18:20:58

标签: iphone ios uitableview uitextview

我需要制作一个包含大量文字的UITableViewCell。我知道我可以在我的单元格中添加UITextView,但每个条目的文本数量都不一样。

我知道我可以使用UITableViewCell来控制-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath的高度,但那不是我想要的。

情景1:

 ---------------
| First Cell    |
 ---------------
 ---------------
| Second Cell   |
| with some     |
| text.         |
 ---------------
 ---------------
| Third Cell    |
 ---------------

情景2:

 ---------------
| First Cell    |
 ---------------
 ---------------
| Second Cell   |
| with some     |
| more text and |
| an unknown    |
| cell height.  | 
 ---------------
 ---------------
| Third Cell    |
 ---------------

3 个答案:

答案 0 :(得分:34)

使用UILabel作为您的手机短信。然后,您可以使用sizeWithFont:constrainedToSize:计算每个单元格内UILabel的高度。例如:

#define PADDING 10.0f

- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *text = [self.items objectAtIndex:indexPath.row];
    CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 3, 1000.0f)];

    return textSize.height + PADDING * 3;
}

答案 1 :(得分:4)

解决方案非常简单,自iOS 7开始应该可以正常运行。确保Scrolling EnabledUITextViewUITableViewCell的{​​{1}}选项关闭 StoryBoard。

然后在你的UITableViewController的viewDidLoad()中设置tableView.rowHeight = UITableViewAutomaticDimensiontableView.estimatedRowHeight > 0,例如:

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 44.0
}

那就是它。 UITableViewCell的高度将根据内部UITextView的高度自动调整。

答案 2 :(得分:2)

这是相当复杂的东西,因为它涉及像文本视图的contentInset这样的东西,在计算文本大小时你必须考虑到它。我已经写了我的学习和解决方案来计算我博客上的UITableViewCell height based on an inner UITextView。该帖子包含适用于通用应用程序的代码,包括表格视图样式和自动旋转。