自动布局:按比例填充不起作用



我正试图通过程序将UIView courseView添加到我在情节提要的界面生成器中绘制的容器视图(称为容器)中。我想让courseView按比例缩放以适应容器。对于以下代码,什么都不显示-courseView不会显示。我错过了什么?

var courseView:UIView?

@IBOutlet weak var container: UIView!
override func viewDidLoad() {
    super.viewDidLoad()
    courseView = UIView(frame: CGRectMake(0, 0, 1000, 1000))
    courseView?.backgroundColor = UIColor.blueColor()
    view.addSubview(courseView!)
    courseView!.translatesAutoresizingMaskIntoConstraints = false
    let courseWidthConstraint = NSLayoutConstraint(item: courseView!, attribute: .Width, relatedBy: .LessThanOrEqual, toItem: container, attribute: .Width, multiplier: 1.0, constant: 0)
    let courseHeightConstraint = NSLayoutConstraint(item: courseView!, attribute: .Height, relatedBy: .LessThanOrEqual, toItem: container, attribute: .Height, multiplier: 1.0, constant: 0)
    let courseViewConstraint = NSLayoutConstraint(item: courseView!, attribute: .Height , relatedBy: .Equal , toItem: courseView!, attribute: .Width, multiplier: 2.0, constant: 0)
    self.view.addConstraints([courseWidthConstraint, courseHeightConstraint, courseViewConstraint])
}

我不清楚您在这里真正想要实现什么。但作为第一个建议,尝试将.LessThanOrEqual替换为.Equal作为宽度约束。

您需要的另一件事是container的一些顶部和引导约束(顶部只是一个建议,您可能需要其他高度对齐)

let courseLeadingConstraint = NSLayoutConstraint(item: courseView!, attribute: .Leading, relatedBy: .Equal, toItem: container, attribute: .Leading, multiplier: 1.0, constant: 0)
let courseTopConstraint = NSLayoutConstraint(item: courseView!, attribute: .Top, relatedBy: .Equal, toItem: container, attribute: .Top, multiplier: 1.0, constant: 0)

高度为宽度一半的纵横比约束为以下

let courseViewConstraint = NSLayoutConstraint(item: courseView!, attribute: . Width , relatedBy: .Equal , toItem: courseView!, attribute: .Height, multiplier: 2.0, constant: 0)

如果成功了,请告诉我。

最新更新