微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决调整自定义 Tableviewcell - NSLayoutConstraint 冲突 UIView-Encapsulated-Layout-Height

我在以编程方式进行自动布局时遇到问题。我正在使用自定义 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)
        
    }

解决方法

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

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

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

310.333

如果您需要 //constraints.append(comicsUIVIew.heightAnchor.constraint(equalToConstant: 310)) let hc = comicsUIVIew.heightAnchor.constraint(equalToConstant: 310) hc.priority = .defaultHigh constraints.append(hc) 完全 comicsUIVIew 点,您可以添加一个清晰的“间隔”视图(或 {{1 }}) 低于 310,给它一个高度约束为 0.0,优先级为 UILayoutGuide。它最终会高 comicsUIVIew.defaultHigh 点。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。