自定义 UITableviewCell 中的多行标签
Posted
技术标签:
【中文标题】自定义 UITableviewCell 中的多行标签【英文标题】:Multiple lines of a label in a custom UITableviewCell 【发布时间】:2013-09-03 19:31:01 【问题描述】:我已经四处寻找有关我的问题的任何提示。但我找不到解决方案。
我已经创建了 UITableviewCell (FeedCell) 的子类。一张图片和两个标签。 问题是我需要多行的标签没有显示多行。
我使用自动布局。
这是一个显示用户 twitterfeed 的应用程序。
我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
FeedCell *tweetCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (tweetCell == nil)
tweetCell = [[FeedCell alloc]
initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
[tweetCell.tweetText setNumberOfLines:0];
[tweetCell.tweetText setLineBreakMode:NSLineBreakByWordWrapping];
[tweetCell.tweetText setFont:[self fontForCell] ];
NSDictionary *tweet = _dataSource[[indexPath row]];
NSString *tweetString = [tweet valueForKey:@"text"];
tweetCell.name.text =[tweet valueForKeyPath:@"user.name"];
[tweetCell.tweetText setText:tweetString];
return tweetCell;
我也设置了heigthforRowAtIndexPath:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
NSDictionary *tweet = _dataSource[[indexPath row]];
NSString *theText=[tweet valueForKey:@"text"];
UIFont *cellFont = [self fontForCell];
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
CGSize labelSize = [theText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
return labelSize.height + 20;
问题是tweet cell.tweetText 没有显示多行。我没有用另一个 CellStyle 尝试过这个(我使用自定义 cellstyle)。
任何提示任何人?
【问题讨论】:
你能记录你标签的框架吗? 你设置了什么布局和行数? 我认为您需要自定义自己的单元子类 不确定这是否会有所帮助,但这里有一个我如何做类似事情的简单示例:github 啊。您在代码中在运行时添加了这些标签。我已经在情节提要视图中制作了这些内容。这可能是问题所在? 【参考方案1】:对于多行使用以下内容:
tweetCell.tweetText.numberOfLines = 0;
[tweetCell.tweetText sizeToFit];
出于测试目的,将行高设置为 46.0f,方法如下:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
我无法解决高度问题,但这确实给了我一个多行的 UILabel
【讨论】:
这与我在互联网上的红色答案相同。所以看起来我可能已经解决了其他一些问题。如果有人想试一试,这里是完整的课程:dropbox.com/sh/fcu61xr532l6q4q/BEiNRih3az【参考方案2】:我知道这是一篇旧帖子,但在我搜索时出现了。
我通过关注http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout得到了一个这样的例子。
我认为 ios8 需要以下内容:
将行设置为 0 设置自动换行 将标签大小设置为 >= 20 确保有足够的约束来确定单元格高度(标题高度和垂直间距)【讨论】:
【参考方案3】:试试
[tweetCell.tweetText sizeToFit]
【讨论】:
没有成功。这是提要的屏幕截图。行高似乎是正确的。但是推文的标签不显示多行。 dropbox.com/s/olilnuc0edqu62i/…【参考方案4】:首先,如果要显示 2 行文本(最小 1 和最大 2),numberOfLines
必须设置为 2。设置为 0 表示没有限制。
其次,仅设置行数是不够的。必须指定标签宽度。要么使用sizeToFit
,要么设置一个常量值。
【讨论】:
另外,我建议在自定义类的init
方法中设置 UITableViewCell
元素的属性。纯属个人意见,不成规。【参考方案5】:
尝试将设置行数、换行模式和字体的代码放在大括号之外
【讨论】:
以上是关于自定义 UITableviewCell 中的多行标签的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableViewCell 中的 detailTextLabel 中添加多行
自定义 TableViewCell 中的标签不能是多行或换行
出现删除按钮时重新计算自定义 UITableViewCell 的高度