自定义 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 样式字幕多行不起作用

出现删除按钮时重新计算自定义 UITableViewCell 的高度

如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?

自定义 UITableViewCell 中标签的自动布局优先级