如何在自定义的UITableViewCell中dynamic设置UITextView的高度和自动布局

我有UITableView,每个tableViewCell是自定义的。 在我的customTableViewCell里面是一个UITextView,TextViews框架是pin或者与它的superView是相同的tableViewCell。 在这里输入图像说明

我如何dynamic设置UITableViewCell高度与TextViews大小成比例,这也取决于我从互联网上获得的内容文本。

(样品原型)

在这里输入图像说明

/ /这是我如何操纵每个单元格的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ // How do I set the height here, whats the best approach for this. with autolayout BTW } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // I initialize every cell here with my ArrayContainer, nothing much to refer here. } 

  1. 按照这个答案: 链接参考

  2. 为您的UITextView添加一个高度约束,并为您的自定义单元类创build一个出口。

  3. 使用sizeThatFits:UITextView上获取适合内容的大小,并将此值设置为2中描述的约束constant 。在tableView:heightForRowAtIndexPath:执行此操作。

一个警告是,如果有很多单元(数百或数千),那么你可能会遇到性能问题。

主要将texts as NSArray获取,并将其分配到UITextView中作为临时文件,以便获得单元格的高度:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { CGRect frame; // set the height here, According to the NSArray of text if(textView || section ) UITextView *tempTxtView = [[UITextView alloc] init]; tempTxtView.text = // Add the Text of index according to the Section // Fit the UITextView to the Content frame = tempTxtView.frame; frame.size.height = tempTxtView.contentSize.height; tempTxtView.frame = frame; } return frame.size.height; } 

一旦得到了UITableViewCell高度:那么不需要担心这个,对吧?

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // I initialize every cell here with my ArrayContainer, nothing much to refer here. self.textView = [[UItextView alloc] initWithFrame:CGRectMake(cell.frame.origin.x +20, cell.frame.origin.y +10, cell.frame.size.width - 20, cell.frame.size.height - 20)]; // ....... Do further with the NSArray of Text } 

注意:我没有testing,只是一个想法。 希望对你有帮助

  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { CGSize titlesize = [TxtValue.text sizeWithFont:[UIFont fontWithName:appdel.strFont size:25.0f] constrainedToSize:CGSizeMake(300, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; /// ----- -set width as per your requirement inplace of 300 return titlesize.height+10; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { }