簡體   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