ios - 如何以编程方式快速设置自动布局中的 UIView 大小?

标签 ios swift uiview autolayout

我使用这段代码制作了两个带有 Auto LayoutUIView :

class ViewController: UIViewController {

    var view_constraint_V:NSArray = [NSLayoutConstraint]();
    var originalValue:CGFloat = 0.0;
    var offsetValue:CGFloat = -100;

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        var topView = UIView()
        topView.setTranslatesAutoresizingMaskIntoConstraints(false)
        topView.backgroundColor = UIColor.blackColor()

        var bottomView = UIView()
        bottomView.setTranslatesAutoresizingMaskIntoConstraints(false)
        bottomView.backgroundColor = UIColor.lightGrayColor()

        let button   = UIButton()
        button.backgroundColor = UIColor.darkGrayColor()
        button.setTitle("Click me!", forState: UIControlState.Normal)
        button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
        button.setTranslatesAutoresizingMaskIntoConstraints(false)

        self.view.addSubview(topView);
        self.view.addSubview(bottomView);
        bottomView.addSubview(button)

        // constraints
        let viewsDictionary = ["top":topView,"bottom":bottomView, "button":button]

        //position constraints
        let view_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[top]-10-|",options: NSLayoutFormatOptions(0),metrics: nil, views: viewsDictionary)
        let view_constraint_H2:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[bottom]-10-|",options: NSLayoutFormatOptions(0),metrics: nil, views: viewsDictionary)

        view_constraint_V = NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[top(bottom)]-[bottom]-10-|", options: NSLayoutFormatOptions.AlignAllLeading, metrics: nil, views: viewsDictionary)

        view.addConstraints(view_constraint_H)
        view.addConstraints(view_constraint_H2)
        view.addConstraints(view_constraint_V)

        originalValue = (view_constraint_V[1] as NSLayoutConstraint).constant;
      //println((view_constraint_V[1] as NSLayoutConstraint))
        (view_constraint_V[1] as NSLayoutConstraint).constant = offsetValue

        // Position button
        let control_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-30-[button]-30-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
        let control_constraint_V:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:|-30-[button(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)

        bottomView.addConstraints(control_constraint_H)
        bottomView.addConstraints(control_constraint_V)

    }
    /**
        Example of dynamically changing the constraints when clicking on a button.
    */
    func buttonAction(sender:UIButton!)
    {
        if (view_constraint_V[1].constant == offsetValue) {
            (view_constraint_V[1] as NSLayoutConstraint).constant = originalValue
        } else {
            (view_constraint_V[1] as NSLayoutConstraint).constant = offsetValue
        }
    }
}

现在,我想以编程方式将顶 View 大小设置为底 View 大小的 1/3,但我不知道该怎么做。

最佳答案

这会起作用:

let heightConstraint = NSLayoutConstraint(item: topView, 
                                          attribute: NSLayoutAttribute.Height,
                                          relatedBy: NSLayoutRelation.Equal,
                                          toItem: bottomView,
                                          attribute: NSLayoutAttribute.Height,
                                          multiplier: 0.33, constant: 0)
self.view.addConstraint(heightConstraint)

let widthConstraint = NSLayoutConstraint(item: topView, 
                                          attribute: NSLayoutAttribute.Width,
                                          relatedBy: NSLayoutRelation.Equal,
                                          toItem: bottomView,
                                          attribute: NSLayoutAttribute.Width,
                                          multiplier: 0.33, constant: 0)

self.view.addConstraint(widthConstraint)

关于ios - 如何以编程方式快速设置自动布局中的 UIView 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30421206/

相关文章:

ios - 如何使用 Square Point of Sale 应用程序的其他付款功能调用我的应用程序?

ios - 在 iOS 中,如何创建一个始终位于所有其他 View Controller 之上的按钮?

swift - 内存泄漏 AlertController/UIImagePickerController

ios - 关闭键盘后如何恢复 UIInputViewController self.view?

ios - 添加为 subview 时,新创建的 UIImageView 不会显示

ios - 如何使用两个#imports?

ios - Swift:类型 'string' 的值没有成员 'length'

swift - SwiftUI 中的几何阅读器是什么?

ios - 在 Swift 5 中获取字符串 md5

ios - UIView w。以编程方式调整大小时,TableView 重叠 TableCells 上方的动态高度