繁体   English   中英

以编程方式添加约束不尊重优先级

[英]Adding constraints programmatically is not respecting priority

以下是将视图添加到超级视图的循环。 每个子视图都是“删除”按钮和左侧的信息.....它们位于父视图中...

每个子视图都限于上面的视图...,顶视图只限于父视图的顶部边缘。所有这些均以编程方式添加。

删除按钮将一次删除一个

我不添加次要优先级800最高锚点的精细版本

当我向每个视图添加次要的顶部约束以说明删除时,我将得到以下信息:...

在此处输入图片说明

var horizontalConstraint1 = NSLayoutConstraint()
var horizontalConstraint2 = NSLayoutConstraint()
var verticalConstraint1 = NSLayoutConstraint()
var verticalConstraintOuter = NSLayoutConstraint()

    horizontalConstraint1 = v.leadingAnchor.constraint(equalTo: (v.superview?.leadingAnchor)!,constant:10)
    horizontalConstraint2 = v.trailingAnchor.constraint(equalTo: (v.superview?.trailingAnchor)!,constant:-10)
      if self.prevView == nil{
           verticalConstraint1 = v.topAnchor.constraint(equalTo: (v.superview?.topAnchor)!, constant: 0)
           NSLayoutConstraint.activate([horizontalConstraint1,horizontalConstraint2,verticalConstraint1 ]) 
            }else {
                 if let pv = self.prevView as? UIView {
                  verticalConstraint1 = v.topAnchor.constraint(equalTo: (pv.bottomAnchor), constant: 10)
                  verticalConstraintOuter = v.topAnchor.constraint(equalTo: (v.superview?.topAnchor)!,constant:10 )
                  verticalConstraintOuter.priority = UILayoutPriority(rawValue: 800)
                  NSLayoutConstraint.activate([horizontalConstraint1,horizontalConstraint2,verticalConstraint1,verticalConstraintOuter])
                        }
     }
       self.prevView = v 

您的技术是错误的。 您没有在每个视图中添加“次要顶部约束来说明删除”。 删除视图时,您将完全删除现有约束并创建一组全新的约束。

另外,也可以使用UIStackView为您完成工作:将已安排视图的isHiddentrue ,然后堆栈视图将重写其已安排视图的约束。

在您的情况下,更简单的方法是使您的界面成为UITableView。 现在,您要做的就是删除表的一行。 “删除此行”的概念基本上内置于表格视图中; 您几乎可以免费获得它(包括删除按钮,尽管没有法律规定您必须使用它)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM