2017-10-16 142 views
0

我想知道是否有人能以編程方式幫助我。我想要的是:以編程方式添加約束以防止按鈕重疊SWIFT 4

我在循環內創建按鈕,並且按鈕水平對齊。某些按鈕的寬度不同,這意味着按鈕可以與另一個按鈕重疊。是否可以使用約束來防止重疊並在兩者之間添加一個空白區域?

在此先感謝

代碼:

 for (j, _) in buttonInfo.enumerated(){ 
     let button: UIButton = buttonArray[j] 
     let stackView = UIStackView(); 

     stackView.spacing = 30; 


     button.tag = Int((buttonInfo[j]?.pID)!)! 
     button.setTitle(buttonInfo[j]?.title, for: .normal) 
     button.addTarget(self, action: #selector(PalletViewController.productCall), for: .touchUpInside) 

     let stock = Int(buttonInfo[j]!.stock) 

     if(stock! == 0 || stock! < 0){ 
      button.isHidden = true; 
     } 


     let views = ["view": view, "button": button] as [String : Any] 





     let spacing = NSLayoutConstraint.constraints(withVisualFormat: "H:|-(10)-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views); 

     view.addConstraints(spacing); 


    } 
+1

你應該看看[UIStackView(https://developer.apple.com/documentation/uikit/uistackview) – Wez

+1

建議是不要在一個循環中添加約束,可以在添加這些按鈕一個字典while循環,然後當循環結束時,只需添加這個'[NSLayoutConstraint constraintsWithVisualFormat:@「H:| - [button] - (5) - [button] - (5) - [button] - |」選項:0度量:無視圖:無];'按鈕的父視圖,最後這些按鈕得到一個白色空間是'5'或你想要什麼 –

+0

@VictorJohn嗨vic,我得到以下錯誤,當使用此代碼: 'let views = [「view」:view]; NSLayoutConstraint.constraints(withVisualFormat:「H:| - [button] - (5) - [button] - (5) - [button] - |」,options:NSLayoutFormatOptions(rawValue:0),metrics:nil, views:views)''理由:無法解析約束格式:它是一個空字符串.' – LifeOS

回答

相關問題