以编程方式使用UITableViewCell子视图中的约束

时间:2018-10-13 11:10:10

标签: ios swift uitableview nslayoutconstraint swift-playground

我正在尝试在Swift Playground中进行约束,然后变得疯狂。我有一个带有UILabel的小from math import inf from functools import partial a = [9989, 989, 9] def sort_algo(x, k): x_str = list(str(x)) return list(map(int, x_str)) + [inf]*(k-len(x_str)) n = max(map(len, map(str, a))) sorter = partial(sort_algo, k=n) a.sort(key=sorter, reverse=True) print(a) [9, 9989, 989]

class CLListTableViewCell: UITableViewCell

我有一个设置布局的函数,我在init末尾调用了该函数:

let nameLabel: UILabel = {
    let label = UILabel()
    label.text = "Here is a great text"
    label.translatesAutoresizingMaskIntoConstraints = false
    label.textAlignment = .left // text alignment in center
    return label
}()

我得到的只是一个美丽的白色空细胞。 有人可以指出我在这里做错了什么吗?缺少约束吗? Playground控制台中没有任何指示。

---编辑---

问题似乎出在显示单元格的tableView中。这是代码:

func addSubViewsAndLayout() {
    contentView.addSubview(nameLabel)

    let views = ["nameLabel": nameLabel]
    let horizontalConstraintsStringRepresentation = "H:|-[nameLabel]-|"

    let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: horizontalConstraintsStringRepresentation, options: .alignAllCenterY, metrics: nil, views: views)

    let verticalConstraintsStringRepresentation = "V:|-[nameLabel]-|"
    let verticalNameConstraints = NSLayoutConstraint.constraints(withVisualFormat: verticalConstraintsStringRepresentation, options: .alignAllLeading, metrics: nil, views: views)
    NSLayoutConstraint.activate(horizontalConstraints)
    NSLayoutConstraint.activate(verticalNameConstraints)
}

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    addSubViewsAndLayout()
}

---编辑2 ---

这里是screenshot of the result

1 个答案:

答案 0 :(得分:0)

感谢Hardik Parmar(非常感谢!),问题出在以下事实中:游乐场代表的是UITableViewController,而不是UITableViewCell。

经过一番阅读,我在PlaygroundPage.current.liveView = myTableViewController之前添加了以下内容:

tableViewController.tableView.beginUpdates()
tableViewController.tableView.endUpdates()

这将强制tableView重绘单元格。现在,我可以正确看到tableView了。我想如果Playground自己做到这一点会很好,但是似乎有必要强迫这种行为。我希望它可以帮助别人!