UITableView 单元格不使用标签文本自动调整大小
Posted
技术标签:
【中文标题】UITableView 单元格不使用标签文本自动调整大小【英文标题】:UITableView Cells not Autoresizing With Label Text 【发布时间】:2018-03-06 03:11:54 【问题描述】:编辑编辑:我在一个新项目中从头开始。每个故事板出口都是相同的,VC 代码也是如此。有趣的是,它有效。
编辑:大家好,我放弃了。每个答案都开始成为主题的变体,而该主题并不能解决此问题。不过感谢您的尝试。
在ViewDidLoad
中,我设置了:
tableView.estimatedRowHeight = 85.0
, tableView.rowHeight = UITableViewAutomaticDimension
我还在情节提要中设置:内容视图的自动调整大小约束。
要换行的标签,以及到 0 的标签行
然而,标签文本仍在其单元格中溢出。 完整的字符串是:“HELLO?如果我写一个长句子会发生什么?”
有什么建议吗?
这是整个视图控制器: 这是选择标签的情节提要:
推荐功能之后: enter image description here 结果: enter image description here
【问题讨论】:
您是否也为内容视图中的标签提供了顶部、左侧、右侧和底部约束?还有行到 0 和换行到自动换行?? 是的。如果您查看第一张图片,您将在内容视图中看到标签的约束。在此之下,我相信我还声明了标签换行,并且行设置为 0。 在你的 calss 中添加这个委托 --> func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat return UITableViewAutomaticDimension 让我知道它是否适合您,否则会建议一些其他解决方案 @blue_shoes 你想做什么?您要将所有文本修复为单元格还是将单元格自动调整大小为内容? 【参考方案1】:您没有设置 heightForRowAt indexPath.. 为此,您应该首先获取文本的大小 在我的情况下,我通过
func rectForText(text: String, font: UIFont, maxSize: CGSize) -> CGSize
let attrString = NSAttributedString.init(string: text, attributes: [NSAttributedStringKey.font:font])
let rect = attrString.boundingRect(with: maxSize, options: NSStringDrawingOptions.usesLineFragmentOrigin, context: nil)
let size = CGSize(width: rect.size.width, height: rect.size.height)//(, )
return size
并根据您的文本设置单元格的高度,在 我的情况
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
var totalHeight : CGFloat = 0
let str = yourString
let size : CGSize = rectForText(text: str, font:UIFont.boldSystemFont(ofSize: 15.0) , maxSize : CGSize(width: 200 * (SCREEN_WIDTH / 320), height: 20000) )
totalHeight = size.height
return CGFloat(totalHeight)
可能对你有用
【讨论】:
【参考方案2】:尝试向内容视图中的标签添加约束。
例如: 左 - 8 分 最高 - 8 分 正确 - 8 分 垫底 - 8 分
现在它应该留在单元格内。
【讨论】:
不幸的是,问题是多个单词 - 会跨越到额外的行 - 被切断。我已经编辑了我的帖子以包含原始字符串。【参考方案3】:您需要添加heightForRowAtIndexPath
以根据其内容自动调整单元格高度。
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
return UITableViewAutomaticDimension
【讨论】:
嗨,Sid,Ishika 在上面推荐了这个,但是当我在类中添加这个函数旁边的其他委托函数时,它仍然不起作用。【参考方案4】:看看我的输出截图。对于标签,您应该给出所有四个约束(顶部:5,底部:5,左侧:5,右侧:5)并且您必须将标签的优先级的高度更改为 750 并将拥抱和阻力优先级设置为 1000 . 然后你必须将storyboard中的行数改为0
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return 250
【讨论】:
您好,感谢您的周到回复 - 我已经实现了这一点,其他委托 tableView 功能旁边的功能 - 但没有任何改变。 你改变了优先级吗? 是的,我将拥抱和阻力优先级设为 1000,并为我设置为 750 的标签添加了 >=10 的高度约束。我保留了顶部/底部/尾随的其他 4 个约束/leading,全部 10,行数为 0。我很困惑。 我会再次发布它,添加的功能。 @blue_shoes:您好,我也遇到了同样的问题。请问您解决了吗?以上是关于UITableView 单元格不使用标签文本自动调整大小的主要内容,如果未能解决你的问题,请参考以下文章