如果我指定所有约束,Xcode会抱怨

时间:2017-11-07 04:27:04

标签: autolayout xcode9

在我的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约束。

0 个答案:

没有答案