简体   繁体   English

UITableViewCell-无法同时满足约束

[英]UITableViewCell - unable to simultaneously satisfy constraints

I'm using SnapKit in order to make constraints and am creating views programatically. 我使用SnapKit来进行约束,并以编程方式创建视图。 However, there's one thing I can't grasp. 但是,有一件事我无法掌握。

I want to add a child UIView into the content view of a table view cell and set its height. 我想将一个子UIView添加到表视图单元格的内容视图中并设置其高度。 This already causes a unsatisfiable constraint error. 这已经导致无法满足的约束错误。

I've tried also setting (estimated)rowHeight in the table view, but that did not help. 我也尝试在表视图中设置(估计)rowHeight,但这没有帮助。

2018-07-14 19:21:38.785556+0200[20027:748731] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<SnapKit.LayoutConstraint:0x6000000b6500@WeatherCell.swift#24 UIView:0x7fa342409240.top == UITableViewCellContentView:0x7fa342413970.top>",
    "<SnapKit.LayoutConstraint:0x6000000b7880@WeatherCell.swift#24 UIView:0x7fa342409240.bottom == UITableViewCellContentView:0x7fa342413970.bottom>",
    "<SnapKit.LayoutConstraint:0x6000000b8a80@WeatherCell.swift#26 UIView:0x7fa342409240.height == 145.784842967987>",
    "<NSLayoutConstraint:0x604000282210 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fa342413970.height == 146   (active)>"
)

Will attempt to recover by breaking constraint 
<SnapKit.LayoutConstraint:0x6000000b8a80@WeatherCell.swift#26 UIView:0x7fa342409240.height == 145.784842967987>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Cell code: 单元格代码:

class WeatherCell: UITableViewCell {
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        let expandView = UIView()

        self.contentView.addSubview(expandView)

        expandView.snp.makeConstraints { view in
            view.edges.equalToSuperview()

            view.height.equalTo(CGFloat(Float(arc4random()) / Float(UINT32_MAX)) * 200)
        }
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

You need to reference the bottom constraint and change it's priority to 999 / high but not to required , so remove the edges constraint and make them separately 您需要参考底部约束并将其优先级更改为999 /高,但不是必需的,因此删除边缘约束并将它们分开

let expandView = UIView()
self.contentView.addSubview(expandView)
expandView.snp.makeConstraints { (view) in
    view.bottom.equalTo(self.contentView).priority(999) // can also be .priority(.high)
    view.top.left.right.equalTo(self.contentView)
    view.height.equalTo(CGFloat(Float(arc4random()) / Float(UINT32_MAX)) * 200)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM