最终更新 - 已修复
我已经修好了。看来,在玩游戏时(这是我在Swift中的第一个项目并使用AutoLayout),我已经更改了contentCompressionResistancePriority
和contentHuggingPriority
的一些视图。取出该代码并将我的所有视图重置为IB中的默认值修复了我的问题。
首发
所以我在iOS上使用AutoLayout来定位我的动态视图。这一切都很好,很容易 直到我弹出一个视图控制器。该应用程序崩溃了一个非常有用的错误消息,如下所示:
...
internal error. Cannot find an outgoing row head for incoming head UIImageView:0xd049d50.Width{id: 730}, which should never happen.'
...
我一直在寻找并搜索网络,但我无法修复它。我发现虽然我的代码中有一行可以有所作为。在我说的视图控制器中,我有一堆使用AutoLayout的UIImageView
以及我从网上加载的图像。
如果不是将我收到的图片设置给他们,我会在 Swift 中设置一个空的([[UIImage alloc] init]
或UIImage()
),这与我的情况完全一样)它不会崩溃了。
我甚至尝试从应用程序包中设置虚拟图像,但这也会导致崩溃。
任何建议都会非常感谢!
更新1
再次查看代码我还发现存在与UIImageViews
相关的约束,这些约束也会在崩溃时消失。这是宽高比约束,看起来像这样
imageView.addConstraint(NSLayoutConstraint(item: imageView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: imageView, attribute: NSLayoutAttribute.Height, multiplier: 8.0 / 5.0, constant: 0.0))
我做错了吗?我真的需要满足这个宽高比,所以我不能真正删除它
更新2
稍微弄清楚它,我已经找到了一种方法让它发挥作用。但是我对此并不满意,因为它并没有让我明白发生了什么,这是一种黑客攻击
让我为您构建视图结构:
这些观点的放置方式如下:
Cover ImageView
与ContentView
一样宽,宽高比为8:5,顶部没有空格Label
都有一个10px的前导空格和一个10px的尾随空格ImageView
与ContentView
一样宽,宽高比为8:5 ContentView
我对崩溃的修复是从ContentView
上的堆栈中删除viewWillDisappear
但是当弹出ViewController时屏幕会闪烁。
我已经检查了我创建代码1000次的约束,看起来是正确的。如果你想看到它让我知道,我会在这里发布
答案 0 :(得分:11)
只需将此放在此处,以防任何人遇到与动态代码生成的aspectRatio
约束相同的问题。我在宽高比约束中切换了高度和宽度关系的顺序(与问题中的那个相比):
aspectConstraint = NSLayoutConstraint(item: cardMedia, attribute: NSLayoutAttribute.Height , relatedBy: NSLayoutRelation.Equal, toItem: cardMedia, attribute: NSLayoutAttribute.Width, multiplier: aspect, constant: 0.0)
乘数aspect
的计算方法是:
let aspect = image.size.height / image.size.width
这似乎阻止了崩溃的发生。希望这有助于某人。
答案 1 :(得分:3)
这听起来好像原始海报的问题已经解决,但我只是遇到了一个类似的问题,并采用了不同的解决方案。发布此处以防其他人遇到我的问题并找到此帖子。
我的应用程序在iPhone 5s(在模拟器中)在iOS 7中崩溃,但在iOS 8或其他设备上没有。当我的控制器被弹出时......以及在UIPageViewController中滚动控制器时,我得到了同样的错误("找不到传入头的传出行头...")。
在这两种情况下,问题都是因为我使用UIView.insertSubview:下面的子视图和UIView.bringSubviewToFront等API将全屏视图叠加在一起。解决方案/解决方法是更改我们的代码以动态添加/删除我们的视图,而不是堆叠它们并改组它们的顺序。
希望这可以帮助其他遇到同样问题的人。
答案 2 :(得分:2)
确定。我修好了。似乎我错误地设置了我的约束。喝完咖啡休息后,我想出了哪些,现在事情不会再崩溃了。
答案 3 :(得分:0)
在我的情况下,这是因为我试图布局(使用自动布局)具有height == CGFLOAT_MAX.
的视图的子视图
相同的代码在iOS7上运行良好,但在iOS6上崩溃。
答案 4 :(得分:0)
UIImageView
。在我的情况下,通过更改执行(或删除)调整内容压缩阻力的代码的顺序来缓解问题。 内容拥抱此图片视图的优先级。
在我的回答中查看更多详情:https://stackoverflow.com/a/27284071/796419
根据您的情况,您的长宽比似乎是'约束引发了类似的问题。