带有子视图的可变 UITableCellView 高度
Posted
技术标签:
【中文标题】带有子视图的可变 UITableCellView 高度【英文标题】:Variable UITableCellView height with subview 【发布时间】:2008-09-24 15:54:26 【问题描述】:我想创建一个具有不同行高的 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
----------------
有人知道如何正确执行此操作吗?
谢谢。
【问题讨论】:
【参考方案1】:UITableViewDelegate 定义了一个可选方法 heightForRowAtIndexPath,它将帮助您入门。然后你需要使用 sizeWithFont。
这里有一些关于您的确切问题的讨论:
http://www.v2ex.com/2008/09/18/how-to-make-uitableviewcell-have-variable-height/
this thread中也讨论了文本大小
【讨论】:
效果很好,谢谢。虽然我使用 sizeToFit 而不是 sizeWithFont。 Fwiw,v2ex.com 链接已失效,看起来该域被卡住了。【参考方案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;
【讨论】:
【参考方案3】:textView.numberOfLines = 2? numberOflines 设置最大行数,所以也许 2 会为你工作?
【讨论】:
以上是关于带有子视图的可变 UITableCellView 高度的主要内容,如果未能解决你的问题,请参考以下文章
可变高度子视图控制器作为 UITableView 的 tableHeaderView
如何在列表视图中为带有自动换行的可变多行长文本自动调整项目高度?