UILabel 应该产生省略号但不起作用

Posted

技术标签:

【中文标题】UILabel 应该产生省略号但不起作用【英文标题】:UILabel should produce ellipsis but doesn't work 【发布时间】:2017-06-18 10:18:24 【问题描述】:

我有一个 UITableView 并且单元格是通过对远程服务的后期调用来填充的。 我已将 UILabel lineBreakMode 属性设置为 NSLineBreakByTruncatingTail 并将行设置为 2。在单元格 xib 上,一切似乎都很好。这是截图:

这是我在解析从远程服务检索到的 JSON 后用来填充文本的一段代码。

func  tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        if (posts.count == 0)
            return tableView.dequeueReusableCell(withIdentifier:
                TableViewCellIdentifiers.emptyCell, for: indexPath)
         else 
            let cell = tableView.dequeueReusableCell(withIdentifier:
                TableViewCellIdentifiers.postCell, for: indexPath) as! PostCell

            let post = posts[indexPath.row]
            cell.userNameLabel.text = post.userName
            cell.postTextLabel.text = post.text
            cell.timeLabel.text = post.time
            cell.distanceLabel.text = post.distance

            return cell
        
    

但这是结果,它不会产生省略号,但每件事都是重叠的

知道问题出在哪里吗?

【问题讨论】:

缺少约束来告诉您的标签它不能超过某个宽度(例如时间标签或距离标签之前的 8 个点)?此外,您可能还想检查关于它的 Y 位置或高度的黄色警告,并查看结果(修复它,并可能添加一个收缩比例以适应字体大小) xib 中的橙色线表示有问题。您可能只设置框架,而不是约束。 【参考方案1】:

您似乎缺少约束。尝试从标签的右边缘设置约束到右侧的TimeDistance 标签。我会让所有标签都有一个固定的宽度,并设置所有约束关系Equal,UILabels 与内部的文本正确对齐。

【讨论】:

【参考方案2】:

这里的问题是因为您给出的宽度限制。黄色警告表示在运行时标签宽度可以超过任何限制。 Y 位置或高度也未正确设置。您需要在运行时设置这两个约束,否则Label 将采用适合文本长度的宽度。

【讨论】:

以上是关于UILabel 应该产生省略号但不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell`sizeToFit`中的UILabel在AutoLayout的单元格内不起作用

设置 UILabel 对齐顶部在单元格中不起作用

为啥“自动调整字体”不起作用?

UILabel NSTextAlignmentRight 不起作用?

UILabel 文本对齐不起作用(Swift 4)

为啥我的 UILabel 的 AutoLayout 不起作用