【问题标题】:Adjusting custom Tableviewcell - NSLayoutConstraint conflict. UIView-Encapsulated-Layout-Height调整自定义 Tableviewcell - NSLayoutConstraint 冲突。 UIView-Encapsulated-Layout-Height
【发布时间】:2021-09-01 19:02:00
【问题描述】:

我以编程方式遇到自动布局问题。我正在使用自定义 UIView 调整 tableviewCell。uiView 内部有一个没有问题的图像。我收到此错误。这里做错了什么?

(
    "<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)
        
    }

【问题讨论】:

    标签: ios swift uitableview autolayout


    【解决方案1】:

    由于单元格分隔符的呈现方式,表格视图可能以非整数高度结束。

    因此,在具有@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 点,您可以在@987654330 下方添加一个清晰的“间隔”视图(或UILayoutGuide) @,给它的高度约束为 0.0,优先级为 .defaultHigh。它最终会变成 0.50.333 点高。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-01
      • 2015-01-13
      • 2015-04-09
      • 2015-10-09
      • 2016-03-04
      • 1970-01-01
      • 2015-06-16
      • 2021-05-21
      相关资源
      最近更新 更多