调整自定义 Tableviewcell - NSLayoutConstraint 冲突。 UIView-Encapsulated-Layout-Height

Adjusting custom Tableviewcell - NSLayoutConstraint conflict. UIView-Encapsulated-Layout-Height

我在使用自动布局时遇到问题 Programmatically.I 正在调整带有自定义 UIView.The 的 tableviewCell uiView 中有一个没有图像的图像 issues.I 正在得到这个 error.What 是这里做错了吗?

(
    "<NSLayoutConstraint:0x6000034e0e10 V:|-(1)-[XKCD_Comics.CardView:0x7f932b610f80]   (active, names: '|':UITableViewCellContentView:0x7f932b6085c0 )>",
    "<NSLayoutConstraint:0x6000034e1a90 XKCD_Comics.CardView:0x7f932b610f80.bottom == UITableViewCellContentView:0x7f932b6085c0.bottom - 1   (active)>",
    "<NSLayoutConstraint:0x6000034e2120 XKCD_Comics.CardView:0x7f932b610f80.height == 310   (active)>",
    "<NSLayoutConstraint:0x6000034e1590 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7f932b6085c0.height == 312.5   (active)>" )

Will attempt to recover by breaking constraint  <NSLayoutConstraint:0x6000034e2120 XKCD_Comics.CardView:0x7f932b610f80.height == 310   (active)>

约束条件

func createViewHierarchy() {
        //Initialize constaints Array
        var constraints = [NSLayoutConstraint]()
        
        //Setting up constraint for UIVIEW - ComicsView
        constraints.append(comicsUIVIew.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 10))
        constraints.append(comicsUIVIew.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 10))
        constraints.append(comicsUIVIew.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: -10))
        constraints.append(comicsUIVIew.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: -10))
        constraints.append(comicsUIVIew.heightAnchor.constraint(equalToConstant: 310))

        //activate NSLayoutconstaints
        NSLayoutConstraint.activate(constraints)
        
    }

Table 由于单元格分隔符的呈现方式,视图最终可能会出现非整数高度。

因此,在具有 @2x 屏幕比例的设备上,您的 comicsUIVIew 高度将最终为 310.5 ...在 @3x 设备上,它将是310.333

如果可以接受,您可以通过更改高度限制的优先级来避免自动布局投诉:

    //constraints.append(comicsUIVIew.heightAnchor.constraint(equalToConstant: 310))

    let hc = comicsUIVIew.heightAnchor.constraint(equalToConstant: 310)
    hc.priority = .defaultHigh
    constraints.append(hc)
    

如果你需要comicsUIVIew正好是310点,可以加一个明确的“spacer " 视图(或 UILayoutGuide)低于 comicsUIVIew,给它一个 0.0 的高度约束和 .defaultHigh 的优先级。它最终会达到 0.50.333 点高。

或者...设置 tableView.separatorStyle = .none,并根据需要将您的单元格设计为具有“底部边框线”以模拟分隔符。