如何解决调整自定义 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 举报,一经查实,本站将立刻删除。