如何使用自动布局为Swift中的可重用UIView设置约束?

时间:2015-06-08 10:11:30

标签: ios swift uiview autolayout constraints

我正在尝试构建一个可重用的UIView,其宽度应该等于Swift中的superview。

由于其超级视图的大小不同,我认为我必须使用自动布局为其设置约束。

但我无法弄清楚如何在Swift中以编程方式执行此操作。

以下是可重用子视图的代码:

import UIKit

class bottomMenu: UIView {

@IBOutlet var bottomMenu: UIView!


required init(coder aDecoder: NSCoder) {
    super.init(coder:aDecoder)
    NSBundle.mainBundle().loadNibNamed("bottomMenu", owner: self, options: nil)

    bottomMenu.backgroundColor = UIColor.redColor()

    //How to make the width of the bottom Menu equal to its superview?

    self.addSubview(self.bottomMenu)
    }

}

有谁能告诉我如何制作它?

由于

3 个答案:

答案 0 :(得分:2)

您可以在UIView子类中使用override didMoveToSuperview()方法并在那里添加约束:

    override func didMoveToSuperview() {
        super.didMoveToSuperview()

        backgroundColor = UIColor.redColor()

        let views = ["view" : self];
        self.setTranslatesAutoresizingMaskIntoConstraints(false)

        self.superview?.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[view]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views))
        self.superview?.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[view]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views))
    }

答案 1 :(得分:0)

为里面的元素添加约束。对于每个元素,添加顶部,底部,左侧和右侧的约束。如果您有任何需要相同尺寸的图像,请添加宽度和高度。如果您可以发布UIView的屏幕截图,我将添加更多信息,并且能够提供更多帮助。

如果您不熟悉autolayout,请查看http://www.raywenderlich.com/50317/beginning-auto-layout-tutorial-in-ios-7-part-1

答案 2 :(得分:0)

以下代码为加载的视图提供与超级视图相同的高度和宽度。 (不确定你想要的高度)

bottomMenu.setTranslatesAutoresizingMaskIntoConstraints(false)

//Views to add constraints to
let views = Dictionary(dictionaryLiteral: ("bottomMenu",bottomMenu))

// Horizontal constraints
let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|[bottomMenu]|", options: nil, metrics: nil, views: views)
self.addConstraints(horizontalConstraints)

// Vertical constraints
let verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|[bottomMenu]|", options: nil, metrics: nil, views: views)
self.addConstraints(verticalConstraints)