我想创建一个具有不同行高的UITableView,我试图通过在UITableViewCells中创建UILabel来实现这一点。
到目前为止,这是我的代码:
- (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;
}
这给了我每个单元格2行文本。但是,每个“条目”具有不同的行数,我希望UITableViewCells自动调整大小,根据需要包装文本,而不更改字体大小。
[textView sizeToFit]
和/或[cell sizeToFit]
似乎无效。
以下是我希望UITableView的外观:
----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------
有谁知道如何正确地做到这一点?
感谢。
答案 0 :(得分:11)
UITableViewDelegate定义了一个可选的方法heightForRowAtIndexPath,它将帮助您入门。然后,您需要使用sizeWithFont。
这里有一些关于你的确切问题的讨论:
http://www.v2ex.com/2008/09/18/how-to-make-uitableviewcell-have-variable-height/
文章大小调整也在this thread
中讨论过答案 1 :(得分:1)
此代码适用于我。不知道它是否完美,但是有效。
- (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;
}
}
答案 2 :(得分:-2)
textView.numberOfLines = 2? numberOflines设置了最大的nuber行数,所以也许2个人会为你做什么?