gpt4 book ai didi

ios - 尺寸等级自动布局 : Constraint Activated For Wrong Size Class

转载 作者:可可西里 更新时间:2023-11-01 00:56:18 25 4
gpt4 key购买 nike

当我设置一个由 Size Classes 定制的 Auto Layout 约束时,这样约束安装在一些 Size Class(es) 中,而不是在其他 Size Class 中,我在运行时收到这个 Unsatisfiable Constraints 错误消息,但结果是预期的在 Interface Builder 上没有错误/警告。

enter image description here

enter image description here

我在测试什么

对于这个简化的示例,为了演示无法满足的约束是如何意外发生的,我希望星形图像具有固定的高度,但基于尺寸类自定义宽度。正如您在图片中看到的,我希望常规宽度的尺寸相当大。

由于Compact Width没有设置宽度约束,所以它根据星图的内在内容获取图片大小。 (图片来源:这颗星来自 Use Your Loaf)

问题

当我在运行 iPhone 8 Plus(iOS 11.1 和 Xcode 9.1)的模拟器中将设备从横向旋转到纵向时,出现以下错误:

Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.

....


Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6040002839d0 UIImageView:0x7fe177d0b940.width == 480 (active)>

显然,即使我的 View 更改为紧凑宽度时,此宽度约束仍然存在,我指定不安装约束。为什么是这样?使用 installed 是否是根据不同的 Size Class 自定义自动布局约束的正确方法?不过,我没有看到任何其他方法可以在 Storyboard 中实现它。

我尝试以编程方式创建宽度约束并从 traitCollectionDidChange 内部设置 .isActive,但我仍然遇到相同的错误。

我在测试来自 Mysteries of Auto Layout WWDC talk 的示例代码时没有遇到这样的错误 ,就像我所做的那样,通过 traitCollectionDidChange 停用/激活约束。

更新

我在 GitHub 上添加了自己的代码.

最佳答案

您可以通过将宽度限制的优先级降低到 999 来消除此错误。

我相信这个警告与自动布局引擎自动添加的 UIView-Encapsulated-Layout-Width 约束有关。关于这种类型的约束有很多问题,但我还没有找到任何好的答案它是什么以及它的作用是什么。我找到的最好的是这个 thread .

<NSLayoutConstraint:0x60400008d110 'UIView-Encapsulated-Layout-Width' UIView:0x7ff1e5f08d20.width == 414   (active)>

如果您在 View 层次结构调试器中查看布局预览,您会发现所有约束都按预期在两个方向上设置。

portrait configuration preview Landscape configuration preview

关于ios - 尺寸等级自动布局 : Constraint Activated For Wrong Size Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47181619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com