我正在尝试在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 ---
答案 0 :(得分:0)
感谢Hardik Parmar(非常感谢!),问题出在以下事实中:游乐场代表的是UITableViewController,而不是UITableViewCell。
经过一番阅读,我在PlaygroundPage.current.liveView = myTableViewController
之前添加了以下内容:
tableViewController.tableView.beginUpdates()
tableViewController.tableView.endUpdates()
这将强制tableView重绘单元格。现在,我可以正确看到tableView了。我想如果Playground自己做到这一点会很好,但是似乎有必要强迫这种行为。我希望它可以帮助别人!