无法将 iOS 自动布局乘数设置为零

Posted

技术标签:

【中文标题】无法将 iOS 自动布局乘数设置为零【英文标题】:Can't set iOS Autolayout multiplier to zero 【发布时间】:2015-07-16 19:22:22 【问题描述】:

我正在尝试做的事情: 我正在尝试使用自动布局约束来动态显示/隐藏视图,但我希望视图在隐藏时有效占用 0 空间(因此普通的隐藏属性对我没有用)。

方法: 我正在使用 NSLayoutConstraints 以编程方式完成所有布局(注意,使用 Xamarin C#,而不是 Objective c),所以我试图以编程方式在一组“可见”约束(正常布局,这总是工作正常)和“ hide" 约束,它将宽度和高度设置为零。

我正在做一些基本的测试,我可以删除一个宽度限制,然后设置一个新的来做我想做的任何事情。但是,每当我尝试定义(更不用说添加到视图中)乘数和常数为零的约束时,NSLayoutConstraint 中的乘数会神奇地变为 1。例如,我的隐藏宽度约束定义为:

NSLayoutConstraint c1 = NSLayoutConstraint.Create(view, NSLayoutAttribute.Width, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 0f, 0f);

我检查约束 c1,乘数为 1,常数为 0。view 是我添加约束的视图(在本例中为 UIButton)。

问题:是否可以像这样将自动布局约束乘数设置为 0?如果是这样,UIButton 是否有什么特别之处阻止我这样做?理想情况下,我希望能够为几乎任何UIView 进行此显示/隐藏。

【问题讨论】:

【参考方案1】:

0 乘数在 ios8 中被破坏/“被认为是愚蠢的”。

解决方法是将常数设置为0,将乘数保留为1。

【讨论】:

啊,那么对于第二个项目(视图)null 和第二个属性NoAttribute,乘数 1 和常数 0 可以有效地将宽度计算为 0?这对我来说似乎很奇怪,特别是如果它实际上等于 0,为什么不让我放 0!我会试一试。 在 iOS 7 中有一些被允许的东西在 8 中被禁止。乘数为 0,将左边缘与前边缘对齐,两个名称为 2。 开花烦人并防止乘数动画/调整 "0 乘数被破坏/"在 iOS8 中被认为是愚蠢的"。"您能否指出有关此更改的任何文档? 据我所知,这从未被记录在案,只是从有效变为无效【参考方案2】:

CGFLOAT_MIN 对我来说很好用。

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 - From Review CGFLOAT_MIN 非常接近于零。是的,您不能将其设置为零。 请编辑您的帖子并将您评论中的信息直接放入您的帖子中。也许您还可以解释如何使用您的建议。恕我直言,这会将您的评论式帖子变成真正的答案。我们 SO 努力保持高质量的问答。感谢您的贡献! CGFLOAT_MIN 已重命名为 CGFloat.leastNormalMagnitude【参考方案3】:

将乘数设置为 0.000001 对我有用。

【讨论】:

以上是关于无法将 iOS 自动布局乘数设置为零的主要内容,如果未能解决你的问题,请参考以下文章

IOS自动布局中位置属性约束方程的非恒等式

iOS自动布局:给顶部空间等于superview高度的1/5

iCarousel 自动布局乘数问题

如何使用自动布局将 UILabel 设置为 UICell 宽度的百分比

了解自动布局中的乘数以使用相对定位

ios水平滚动视图和自动布局问题