如何在 ios swift 中以编程方式创建自动布局等宽约束?

Posted

技术标签:

【中文标题】如何在 ios swift 中以编程方式创建自动布局等宽约束?【英文标题】:How to create Auto layout equal width constraint programmatically in ios swift? 【发布时间】:2016-12-05 09:39:40 【问题描述】:

如何通过多个视图以编程方式约束等宽和等高。我检查了谷歌,但不是通过自动布局以编程方式等宽和高度约束的完美答案。

我的代码如下所示:

  var countNoOfViews:Int = 3   
 @IBOutlet var viewForRow1: UIView!

override func viewDidLoad() 
        super.viewDidLoad()
 self.specialButtonViewLeft()


func specialButtonViewLeft()

    for i in 0..<countNoOfViews
        var customView:UIView!
        customView = UIView(frame: CGRect.zero)
        customView.translatesAutoresizingMaskIntoConstraints = false
        viewForRow1.addSubview(customView)

        let widthConstraint = NSLayoutConstraint(item: customView, attribute: .width, relatedBy: .equal,toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 20.0)

        let topConstraint = NSLayoutConstraint(item: customView, attribute: .top, relatedBy: .equal,toItem: self.viewForRow1, attribute: .top, multiplier: 1.0, constant: 0)

        let bottomConstraint = NSLayoutConstraint(item: customView, attribute: .bottom, relatedBy: .equal,toItem: self.viewForRow1, attribute: .bottom, multiplier: 1.0, constant: 0)

        let leadingConstraint = NSLayoutConstraint(item: customView, attribute: .leading, relatedBy: .equal, toItem: self.viewForRow1, attribute: .leading, multiplier: 1, constant: customLeadingSpaceLeft)

        customLeadingSpaceLeft = customLeadingSpaceLeft + customViewWidth

        arrayLeftBtnConstraints.append(widthConstraint)

        if i == 0
            customView.backgroundColor = UIColor.red
        else if i == 1
            customView.backgroundColor = UIColor.green
        else if i == 2
            leftViewVal = customLeadingSpaceLeft
            customView.backgroundColor = UIColor.black
        
        customView.alpha = 0.50
        viewForRow1.addConstraints([widthConstraint, leadingConstraint,topConstraint,bottomConstraint])
    

我想以编程方式添加等宽约束。

【问题讨论】:

你能完成工作吗? 【参考方案1】:

您有三种可能的方式来做到这一点:

1) 通过使用锚点:

view.widthAnchor.constraint(equalTo: otherView.widthAnchor, multiplier: 1.0).isActive = true

2) 视觉格式:

简单示例 - "H:|[otherView]-[view(==otherView)]|"

3)“老派”约束:

NSLayoutConstraint(item: #view, attribute: .width, relatedBy: .equal, toItem: #otherView, attribute: .width, multiplier: 1.0, constant: 0.0).isActive = true

希望对某人有所帮助。

【讨论】:

甚至更短.. view.widthAnchor.constraint(equalTo: otherView.widthAnchor).isActive = true :)【参考方案2】:

试试这个:

let widthConstraint = NSLayoutConstraint(item: customView, attribute: .width, relatedBy: .equal, toItem: viewForRow1, attribute: .width, multiplier: 0.25, constant: 0.0)

multiplier: 0.25,表示customView的宽度将是父视图viewForRow1的1/4。

【讨论】:

谢谢。但是我有多个视图将宽度相等的宽度划分为超级视图。另外,我想根据方向更改编程自动布局约束的宽度,例如纵向 - 30 和横向 - 40 宽度跨度>

以上是关于如何在 ios swift 中以编程方式创建自动布局等宽约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 在 iOS 中以编程方式进行 segue

如何在 Swift 中以编程方式创建新的 UIViewController

如何在 ios swift 中以编程方式将情节提要视图控制器加载到标签栏控制器中?

如何在 Swift 中以编程方式创建 SplitViewController?

在 iOS 10 + Swift 3 中以编程方式在我的 WKWebView 上方添加 UILabel

如何在 ios 中以编程方式添加约束