UITableViewCell`sizeToFit`中的UILabel在AutoLayout的单元格内不起作用
Posted
技术标签:
【中文标题】UITableViewCell`sizeToFit`中的UILabel在AutoLayout的单元格内不起作用【英文标题】:UILabel inside UITableViewCell `sizeToFit` not working inside cell with AutoLayout 【发布时间】:2017-12-21 07:29:57 【问题描述】:我已经尝试解决这个问题将近一天了。所以点应该与它旁边的 UILabel 对齐。问题是,当填充正确的内容时,第二个标签有时会变成 2 行。点必须与 UILabel 的第一行对齐,无论它有 1 行还是 2 行。
当单元格更新时,我尝试在运行时调用sizeToFit()
。好像没什么效果。我读了Vertically align text to top within a UILabel 线程。
我模拟如果sizeToFit()
(Editor -> Size to fit content)调用成功,行高不会缩小。
每一行由 UIView 组成,在这个视图里面有点和 UILabel。点也是 UIView。单行 UILabel 的行的高度常数为 20。可能有 2 行 UILabel 的行我设置为
点必须与 UILabel 的第一行对齐,无论它有 1 行还是 2 行。这在较小的屏幕上效果很好。
有人可以帮忙吗?
【问题讨论】:
您是否将 UILabel 的 noOfLines 设置为 0 ? @Seto Elkahfi 是的。我在 IB 上设置。 @dahiya_boy 它必须与 UILabel 的第一行对齐,无论是 1 行还是 2 行 @SetoElkahfi 我知道解决方案,给我 10 分钟 将点视图的顶部约束设置为上方的 UILable 【参考方案1】:1. UIViewController 层次结构
2。约束
View Main Content BG
lbl1
dot1
lbl2
lbl1
= 10 ,leading & trailling = lbl1.leading & lbl1.leading
dot2
lbl3
lbl2
= 10 ,前导和尾随 = lbl2.leading & lbl2.leading 和底部 = 10 wrt superview
dot1
不要忘记每个标签的行数 = 0。并绑定 tableview 委托和数据源 wrt VC。
3.现在您的故事板设计如下所示
4.现在在 VC 中
虚拟数组
var arrList : [[String : String]] = [["lbl1": "Do any additional setup after loading the view, typically from a nib.",
"lbl2": "Do any additional.",
"lbl3": "that can be recreated"],
["lbl1": "Do any additional .",
"lbl2": "Do any additional setup after loading the view, typically from a nib.",
"lbl3": "that can be recreated"],
["lbl1": "Do any additional . Do any additional setup after loading the view, typically from a nib.",
"lbl2": "Do any additional setup after loading the view, typically from a nib.",
"lbl3": "that can be recreated Do any additional setup after loading the view, typically from a nib. Do any additional setup after loading the view, typically from a nib."]]
TableView 委托和数据源
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return 110
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return arrList.count
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "TblCell") as! TblCell
let dict = arrList[indexPath.row]
cell.lbl1.text = dict["lbl1"]
cell.lbl2.text = dict["lbl2"]
cell.lbl3.text = dict["lbl3"]
return cell
5.最终输出
编辑
如果你用他们的 respec 标签设置了 constant = 5 wr 的点顶部,那么输出如下。
【讨论】:
我试试看。 我接受你的回答。我太专注于当前的视图组件并且害怕重构。自己注意。谢谢。 +1 实现估计的高度为我修复了它【参考方案2】:将行数 0 设置为 UILable 并移除其高度约束。所以它会相应地增长它的内容。
为 UILable 提供适当的前导、顶部、尾随、底部约束。将 UITableViewRow 高度属性设置为 UITableViewAutomaticDimesion tableview.rowHeight = UITableViewAutomaticDimesion tableView.estimatedRowHeight = 44
将恒定的宽度和高度约束设置为点视图,并将其前导约束设置为单元格视图,将水平间距设置为标签。并将其与 UILabel 的顶部对齐。
使用上述方式,无需设置 sizeToFit 等属性。 它会解决你的问题。
您在将高度约束设置为 UILable 时遇到了问题。如果您从当前代码中删除它,它将解决您的问题。
【讨论】:
我没有为 UILabel 设置高度约束。这是它的父视图。【参考方案3】:目前,如果您没有找到任何解决方案,您可以尝试复制该字符 ■ 并将其粘贴到标签字符串的开头。该临时解决方案适用于您。
您可以使用属性选项更改颜色和喜好。
【讨论】:
它会起作用,但如果 UILabel 之一有两行,点将不在同一列中。谢谢。 你可以使用 NSMutableAttributedString 来改变第一个字符的颜色和字体大小。以上是关于UITableViewCell`sizeToFit`中的UILabel在AutoLayout的单元格内不起作用的主要内容,如果未能解决你的问题,请参考以下文章