自动布局:缩放填充不起作用

Posted

技术标签:

【中文标题】自动布局:缩放填充不起作用【英文标题】:Autolayout: Scale to fill does not work 【发布时间】:2016-04-20 18:50:42 【问题描述】:

我正在尝试以编程方式将 UIView courseView 添加到我在 Storyboard 的 Interface Builder 中绘制的容器视图(称为容器)中。 我希望 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])


【问题讨论】:

你试过courseView!.layer.bounds = CGsizeMake(conatiner.layer.bounds.width, container.layer.bounds.height)吗? 你的视图需要某种约束来告诉它它的最小尺寸是多少。现在它只是将它的宽度和高度调整为零,因为它们是它可以找到的满足所有约束的最小尺寸 太棒了,我没有意识到它的尺寸尽可能小。我认为情况正好相反。 【参考方案1】:

我不清楚你在这里真正想要实现什么。但作为第一个建议,尝试将 .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)

如果成功了请告诉我。

【讨论】:

我正在尝试缩放 UIView courseView!纵横比为 2:1(因此第三个 NSLayoutConstraint 中的乘数为 2.0。如果我将第一个设置为 .Equal 它只会填充容器视图。 照 Catalina 说的做,但也要设置尾随和底部。底部约束的乘数可以是 2。还要避免强制展开。 @Pete 它应该如何扩展?宽度是高度的一半还是相反? @Catalina 高度是宽度的一半。实际上在我的最终应用中,这个值是可变的。 嗯。不知何故,现在容器调整了大小并且两者都更小了(但方面现在是正确的)。我基本上想要做的是保持容器大小和方面用 courseView 填充它。但我可能很难解释!

以上是关于自动布局:缩放填充不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Qwt 绘图自动缩放不起作用

UWP ListView 滚动和缩放不起作用

kubernetes自动缩放不起作用

GAE Java 自动缩放最小空闲实例不起作用?

AWS EC2 实例终止保护在自动缩放 IN 下不起作用

按钮的填充在没有背景的情况下不起作用