在我的UITableViewCell子类中,我添加了两个元素,并按如下所示指定它们。注意我是如何离开球的底部限制的。当我这样做时,Xcode会给出一个运行时警告,说高度无法确定,而且它正在为我猜测。
override func awakeFromNib() {
super.awakeFromNib()
contentView.addSubview(date) // Date is a UILabel
contentView.addSubview(balls) // Balls is a UIStackView subclass
balls.ballSize = 35 // This adds a height 35 constraint to balls
NSLayoutConstraint.activate([
date.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor, constant: 20),
date.centerYAnchor.constraint(equalTo: safeAreaLayoutGuide.centerYAnchor)
])
regularConstraints = [
date.trailingAnchor.constraint(greaterThanOrEqualTo: balls.leadingAnchor, constant: 20),
balls.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: 10),
//balls.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor, constant: -10),
balls.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor, constant: -20),
]
NSLayoutConstraint.activate(regularConstraints)
}
然后我取消注释底部锚点的线,这意味着我现在已经完全约束了单元格的高度。但是当我这样做时,我得到了所有这些垃圾。我不知道它为什么会出现问题:
(
"<NSLayoutConstraint:0x6040002896f0 DidIWin.BallView:0x7f81c8d51af0.width == 35 (active)>", "<NSLayoutConstraint:0x604000289880 DidIWin.BallView:0x7f81c8d51af0.height == DidIWin.BallView:0x7f81c8d51af0.width (active)>", "<NSLayoutConstraint:0x60400028aaf0 DidIWin.Balls:0x7f81c8d4fd70.top == UILayoutGuide:0x6040001b1720'UIViewSafeAreaLayoutGuide'.top + 10 (active)>", "<NSLayoutConstraint:0x60400028ab40 DidIWin.Balls:0x7f81c8d4fd70.bottom == UILayoutGuide:0x6040001b1720'UIViewSafeAreaLayoutGuide'.bottom - 10 (active)>", "<NSLayoutConstraint:0x60400028a190 'UISV-alignment' DidIWin.BallView:0x7f81c8d500d0.bottom == DidIWin.BallView:0x7f81c8d51af0.bottom (active)>", "<NSLayoutConstraint:0x60400028a370 'UISV-alignment' DidIWin.BallView:0x7f81c8d500d0.top == DidIWin.BallView:0x7f81c8d51af0.top (active)>", "<NSLayoutConstraint:0x604000288390 'UISV-canvas-connection' DidIWin.Balls:0x7f81c8d4fd70.top == DidIWin.BallView:0x7f81c8d500d0.top (active)>", "<NSLayoutConstraint:0x60400028a0a0 'UISV-canvas-connection' V:[DidIWin.BallView:0x7f81c8d500d0]-(0)-| (active, names: '|':DidIWin.Balls:0x7f81c8d4fd70 )>", "<NSLayoutConstraint:0x60400028a2d0 'UIView-Encapsulated-Layout-Height' DidIWin.FailureDetailCell:0x7f81ca0d5800'failure'.height == 44 (active)>", "<NSLayoutConstraint:0x604000289ce0 'UIViewSafeAreaLayoutGuide-bottom' V:[UILayoutGuide:0x6040001b1720'UIViewSafeAreaLayoutGuide']-(0)-| (active, names: '|':DidIWin.FailureDetailCell:0x7f81ca0d5800'failure' )>", "<NSLayoutConstraint:0x604000289c40 'UIViewSafeAreaLayoutGuide-top' V:|-(0)-[UILayoutGuide:0x6040001b1720'UIViewSafeAreaLayoutGuide'] (active, names: '|':DidIWin.FailureDetailCell:0x7f81ca0d5800'failure' )>"
)
将尝试通过违反约束来恢复
NSLayoutConstraint:0x604000289880 DidIWin.BallView:0x7f81c8d51af0.height == DidIWin.BallView:0x7f81c8d51af0.width(active)&gt;
Balls stackview包含6个BallView类,并且它们具有height == width约束。