UITableViewCell约束错误

时间:2017-09-29 14:47:06

标签: ios swift uitableview

我有一个不同的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
}

1 个答案:

答案 0 :(得分:0)

这里的问题是你混合基于框架的布局规则和Autolayout规则。 通过计算vpview的大小和宽度,您可以在代码中执行基于框架的布局。 Autolayout约束是您通过激活位置属性(顶部,底部,左侧,右侧)的一些锚点约束来实现的。

默认情况下,添加视图时,默认情况下会解决一些原型设置约束。这就是为什么默认情况下translatesAutoresizingMaskIntoConstraints等于true。

因此,如果我在函数playerView中使用您的代码,那么您要对编译器说:

  • 不要担心我自己计算这个视图的高度
  • 然后你基于框架布局禁用你的框架布局并告诉编译器通过设置锚点约束来处理它。
  • RESULT =>编译器很明显丢失,因为你计算的大小(高度,宽度)和锚点约束都有冲突。

因此,您必须自行计算您的观点的大小和位置,或使用自动布局。然后在您的错误控制台上,您可以列出所有冲突的约束并尝试解决它们。

P.S:当你想要修复左右锚点约束时,你应该更喜欢尾随和引导锚点。 Apple推荐它。 Apple的文档可以了解布局和自动布局:Apple doc