我需要制作一个包含大量文字的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 |
---------------
答案 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 Enabled
内UITextView
内UITableViewCell
的{{1}}选项关闭 StoryBoard。
然后在你的UITableViewController的viewDidLoad()中设置tableView.rowHeight = UITableViewAutomaticDimension
和tableView.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。该帖子包含适用于通用应用程序的代码,包括表格视图样式和自动旋转。