10

我有UITableviewCell子类。在那个单元格中,我有 2 个标签(lblCommentlblDateTimeStampe)和一个视图来显示评级星。我希望 lblComment 的动态高度适合所有文本。它应该根据评论的长度扩大和缩小高度。我之前已经实现了这个,但没有像下面这样的 AutoLayout

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  {  

    NSString *label =  self.userComment.commentText;
    CGSize stringSize = [label sizeWithFont:[UIFont boldSystemFontOfSize:15]
                          constrainedToSize:CGSizeMake(320, 9999) 
                              lineBreakMode:UILineBreakModeWordWrap];

    return stringSize.height+10;

} 

现在我正在使用自动布局功能。

如何使用 Autolayout 实现这一目标?

任何形式的帮助表示赞赏。谢谢

4

4 回答 4

3

不幸的是,自动布局不会帮助你tableView:heightForRowAtIndexPath。您仍然必须实现该方法。

您可以使用UIView'systemLayoutSizeFittingSize:方法,但这意味着您必须实例化和配置一个表格视图单元格,这可能会非常昂贵。不过,您可以将其保留在屏幕外并将其重新用于计算。但在这一点上,您并没有真正节省太多的开发工作量,因此像以前手动进行计算可能是最好/最快的方法。

于 2013-05-20T00:28:04.110 回答
0

您可以使用免费提供的 Sensible TableView 框架。该框架会随着内容的增长自动调整单元格的大小。如果表格视图已经显示,它也会动态地执行此操作。

于 2013-03-19T23:56:09.683 回答
0

我已经使用自动布局实现了相同问题的解决方案,并且可以正常工作。

首先,您需要为 lblComment 定义 heightConstraint。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
UIFont *font = [UIFont fontWithName:@"YourFontName" size:YourFontSize] ;
UITextView *calculationView = [[UITextView alloc] init];
[calculationView setFont:font];
[calculationView setTextAlignment:NSTextAlignmentLeft];
[calculationView setText:lblComment.text];
int width = 0;
if(self.appDelegate.isDeviceiPhone)
    width = 284;
else
    width = 720;
CGSize size = [calculationView sizeThatFits:CGSizeMake(width, FLT_MAX)];
   return size.height;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
//initialize the cell..

UIFont *font = [UIFont fontWithName:@"YourFontName" size:YourFontSize];

UITextView *calculationView = [[UITextView alloc] init];
[calculationView setFont:font];
[calculationView setTextAlignment:NSTextAlignmentLeft];
[calculationView setText:cell.lblComment.text];

int width = 0;

if(self.appDelegate.isDeviceiPhone)
    width = 284;
else
    width = 720;

CGSize size = [calculationView sizeThatFits:CGSizeMake(width, FLT_MAX)];

cell.lblDetailHeightConstraint.constant = size.height;

// the other stuff...
}

希望这可以帮助。

于 2013-11-06T09:18:59.083 回答
-2

如果您在 IB 中正确设置约束,这应该可以工作。您不必以编程方式添加元素,尽管正如您所说的那样也可以。

假设您在 tableviewcell 中有 label1(可变高度)、label2 和 view1,您应该:

  1. 在 label2 和 view1 上设置固定高度约束
  2. 将 view1 的底部固定到单元格的底部
  3. 固定view1和label2的垂直间距
  4. 固定label2和label1的垂直间距
  5. 将 label1 的顶部间距固定到单元格的顶部

只要确保你对 label1 没有高度限制,如果你这样做,它应该只大于或等于。通过这样的配置,您可以继续使用 heightForRowAtIndexPath 并且 label1 将根据单元格的高度垂直扩展和收缩。

于 2013-05-11T12:30:50.240 回答