我有一个不同的UITableViewCells视图,取决于其中一个单元格将被加载,但是1个单元格正在弄乱我。
我正在尝试将它添加到表格视图中,但我的约束正在弄乱我。如果translatesAutoresizingMaskIntoConstraints为true,则显示正常,但是我得到了有关约束的众所周知的错误消息。将translatesAutoresizingMaskIntoConstraints设置为false,似乎完全弄乱了布局,特别是高度明智。
class videoCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
playerView()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func playerView() {
let height = self.frame.width * 9 / 16
let vpFrame = CGRect(x: 0, y: 0, width: self.frame.width, height: height)
let vpView = vpView(frame: vpFrame)
//vpView.translatesAutoresizingMaskIntoConstraints = false
vpView.sizeToFit()
addSubview(vpView)
vpView.leftAnchor.constraint(equalTo: leftAnchor, constant: 10).isActive = true
vpView.rightAnchor.constraint(equalTo: rightAnchor, constant: -10).isActive = true
vpView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -10).isActive = true
vpView.topAnchor.constraint(equalTo: topAnchor, constant: 10).isActive = true
}
}
有关translatesAutoresizingMaskIntoConstraints的错误:
[LayoutConstraints]无法同时满足约束。 可能至少下列列表中的一个约束是一个 你不想要。
我也有这一套:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
答案 0 :(得分:0)
这里的问题是你混合基于框架的布局规则和Autolayout规则。 通过计算vpview的大小和宽度,您可以在代码中执行基于框架的布局。 Autolayout约束是您通过激活位置属性(顶部,底部,左侧,右侧)的一些锚点约束来实现的。
默认情况下,添加视图时,默认情况下会解决一些原型设置约束。这就是为什么默认情况下translatesAutoresizingMaskIntoConstraints
等于true。
因此,如果我在函数playerView
中使用您的代码,那么您要对编译器说:
因此,您必须自行计算您的观点的大小和位置,或使用自动布局。然后在您的错误控制台上,您可以列出所有冲突的约束并尝试解决它们。
P.S:当你想要修复左右锚点约束时,你应该更喜欢尾随和引导锚点。 Apple推荐它。 Apple的文档可以了解布局和自动布局:Apple doc