如何重写可视化格式
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|-[label]-|", options: .AlignAllBaseline, metrics: nil, views: ["label": label]))
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[label]-|", options: .AlignAllCenterX, metrics: nil, views: ["label": label]))通过移动到布局指南(带边距)?
我试过了
label.topAnchor.constraintEqualToAnchor(layoutMarginsGuide.topAnchor).active = true
label.leftAnchor.constraintEqualToAnchor(layoutMarginsGuide.leftAnchor).active = true
label.bottomAnchor.constraintEqualToAnchor(layoutMarginsGuide.bottomAnchor).active = true
label.rightAnchor.constraintEqualToAnchor(layoutMarginsGuide.rightAnchor).active = true但不起作用。甚至layoutMarginsGuide.layoutFrame也没有期望值(是的,在执行super之后,我在layoutSubviews中称之为super)。约束是设置的,但其行为似乎是零裕度。它只在布局边距设置为负值时布局并给出预期的layoutFrame;这显然不是我想要的,但它演示了使用边距指南设置约束。看来我错过了什么..。
发布于 2015-12-08 00:55:48
在我看来,layoutMarginsGuide还没有准备好UIView的init方法。我也遇到了类似的问题,在updateConstraints中设置约束是有效的。还在调查原因。
更新:在将视图添加到superview之前(init中),我要做的是设置layoutMargins。那不管用。所做的工作是设置init中相对于layoutMarginsGuide的约束,但实际上是在viewDidMoveToSuperView中设置layoutMargins。
发布于 2016-10-30 22:38:40
我对此做了另一项研究,因为我们现在有了iOS 10。
layoutMarginsGuide (即使是在print中,我们仍然在讨论初始化程序中的调用),您将破坏本指南,因此即使在以后的调用中(例如,在didMoveToWindow中),它也不会工作。您可以通过设置新layoutMargins来修复它(但新值必须与旧值不同)。我认为这是一个错误,并将其归档(请将其归档,以便为修复提供优先排序)。
发布于 2018-04-12 08:55:51
实际上,我发现您可以在layoutMargins和约束中设置init,而不存在任何问题。
它只需要设置
self.translatesAutoresizingMaskIntoConstraints = false
(是的,self)
如果不这样做,任何约束都不会中断,尽管边距不能工作(在iOS 10中)
https://stackoverflow.com/questions/32694124
复制相似问题