UITabel UITableViewCell`sizeToFit`里面的UILabel没有在AutoLayout的单元格内工作

时间:2017-12-21 07:29:57

标签: ios swift autolayout uilabel

我一直试图解决这个问题差不多一天。因此,点应与其旁边的UILabel对齐。问题是,当填充正确的内容时,第二个标签有时会变成2行。点必须与UILabel 的第一行对齐,无论它有1行还是2行。

enter image description here

我在更新单元格时尝试在运行时调用sizeToFit()。似乎没有效果。我读了Vertically align text to top within a UILabel帖子。

我模拟成功调用sizeToFit()(编辑器 - >尺寸以适应内容),行的高度不会缩小。

enter image description here

每一行都包含UIView,在这个视图中有点和UILabel。点也是UIView。单行UILabel的行具有高度常数20.可能有2行UILabel的行设置为< = 26。

点必须与UILabel的第一行对齐,无论它有1行还是2行。这适用于较小的屏幕。

enter image description here

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

<强> 1。 UIViewController层次结构

enter image description here

<强> 2。约束

  1. View Main Content BG

    • top,bottom,leading,trailing = 0 wrt superview。
  2. lbl1

    • top = 10,trailling = 10 wrt superview
  3. dot1

    • leading = 10 top = lbl1.top,水平空间wrt为lbl1 = 10,height = 10 width = 10
  4. lbl2

    • 垂直空间wrt lbl1 = 10,领先&amp; trailling = lbl1.leading&amp; lbl1.leading
  5. dot2

    • leading = dot1.leading,top = lbl2.top,height = 10 width = 10
  6. lbl3

    • 垂直空间wrt lbl2 = 10,领先&amp; trailling = lbl2.leading&amp; lbl2.leading和bottom = 10 wrt superview
  7. dot1

    • leading = dot2.leading,top = lbl3.top,height = 10 width = 10
  8. 别忘了保留每个标签的行数= 0。并绑定tableview委托&amp;数据源与VC。

    第3。现在你的故事板设计看起来像这样

    enter image description here

    <强> 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委托&amp;数据源

    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。最终产出

    enter image description here

      

    修改

    如果您使用respec标签设置常数= 5 wr的点的顶部,则输出低于。

    enter image description here

答案 1 :(得分:0)

  1. 将第0行设置为UILable并删除其高度Constraint。所以它会相应地增加内容。

  2. 为UILable提供正确的前导,顶部,尾部,底部约束。将UITableViewRow height属性设置为UITableViewAutomaticDimesion tableview.rowHeight = UITableViewAutomaticDimesion tableView.estimatedRowHeight = 44

  3. 将常量宽度和高度约束设置为点视图,并将其前导约束设置为单元格视图,将水平间距设置为标签。并将其与UILabel的顶部对齐。

  4. 使用上述方法无需设置sizeToFit等属性。 它会解决你的问题。

    当您将高度限制设置为UILable时,您遇到了问题。如果您从当前代码中删除它,它将解决您的问题。

答案 2 :(得分:0)

暂时如果你没有找到任何解决方案,你可以尝试复制那个字符■并在标签字符串的开头处将其过去。这个临时解决方案适用于你。

Add dot in start of lable

您可以使用Attributed选项更改颜色和喜好。 Text Attributed