带有子视图的可变UITableCellView高度
时间:2020-03-06 14:40:17 来源:igfitidea点击:
我想创建一个具有不同行高的UITableView,并且我试图通过在UITableViewCells内部创建UILabels来实现这一点。
到目前为止,这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *MyIdentifier = @"EntryCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease]; } UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 300, 40)]; textView.numberOfLines = 0; textView.text = [entries objectAtIndex:[indexPath row]]; [cell.contentView addSubview:textView]; [textView release]; return cell; }
这使我每个单元格有两行文本。但是,每个"条目"都有不同的行数,我希望UITableViewCells自动调整大小,并根据需要包装文本,而不更改字体大小。
[textView sizeToFit]
和/或者[cell sizeToFit]
似乎不起作用。
这是我希望UITableView看起来的样子:
---------------- Lorem ipsum ---------------- Lorem ipsum Lorem ipsum ---------------- Lorem ipsum Lorem ipsum Lorem ipsum ---------------- Lorem ipsum ---------------- Lorem ipsum Lorem ipsum ----------------
有人知道如何正确执行此操作吗?
谢谢。
解决方案
UITableViewDelegate定义了一个可选方法heightForRowAtIndexPath,它将使我们入门。然后,我们需要使用sizeWithFont。
这里有一些关于确切问题的讨论:
http://www.v2ex.com/2008/09/18/how-to-make-uitableviewcell-have-variable-height/
在该线程中还讨论了文本大小调整
textView.numberOfLines = 2?
numberOflines设置行的最大数量,所以也许2对我们来说应该吗?
这段代码对我有用。不知道它是否完美,但是可以。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if(indexPath.row<[notesModel numberOfNotes]){ NSString *cellText = [@"Your text..."]; UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:12.0]; CGSize constraintSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - 100, MAXFLOAT); CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; return labelSize.height + 20; } else { return 20; } }