Ios 集合视图上奇怪的自动布局行为

Ios 集合视图上奇怪的自动布局行为,ios,objective-c,xcode,autolayout,uicollectionview,Ios,Objective C,Xcode,Autolayout,Uicollectionview,我的autolayout有问题,控制台报告我在单元格中的图像视图有问题: RefreshCatalogue[31754:16177989] 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 tr

我的autolayout有问题,控制台报告我在单元格中的图像视图有问题:

RefreshCatalogue[31754:16177989] 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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7fa98103b740 V:[UIImageView:0x7fa9810375d0]-(0)-|   (Names: '|':UIView:0x7fa9810371d0 )>",
    "<NSLayoutConstraint:0x7fa98103b7e0 V:|-(0)-[UIImageView:0x7fa9810375d0]   (Names: '|':UIView:0x7fa9810371d0 )>",
    "<NSLayoutConstraint:0x7fa98103b8d0 UIImageView:0x7fa9810375d0.centerY == UIImageView:0x7fa981037490.centerY>",
    "<NSLayoutConstraint:0x7fa98103ba60 UIImageView:0x7fa981037490.top == UIView:0x7fa9810371d0.topMargin + 71>",
    "<NSAutoresizingMaskLayoutConstraint:0x7fa980d44a10 h=--& v=--& V:[UIView:0x7fa9810371d0(50)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fa98103b8d0 UIImageView:0x7fa9810375d0.centerY == UIImageView:0x7fa981037490.centerY>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
没有显示,即使图像视图似乎有正确的帧,图像属性已设置。 如果使用以下命令重新加载整个集合视图:

[self.collectionView reloadData];
错误仍然存在,但如图所示。代码在这里是开放的,任何人都有兴趣看一下:

此外,故事板中的所有约束似乎都是蓝色的。知道是什么导致了这个问题吗


编辑:不用说,包括图像视图在内的所有元素都在正确的位置(我调试了帧并设置了随机颜色),但是图像直到刷新后才显示。。。有时单元格根本不显示,警告信息给出了错误的线索

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fa98103b8d0 UIImageView:0x7fa9810375d0.centerY == UIImageView:0x7fa981037490.centerY>
将尝试通过破坏约束进行恢复
因此,要进行分析,有两个基于视图的对象。其中一个设置为将其自身从上到下居中到另一个视图(0x7fa9810375d0到0x7fa981037490-这些是视图id)

但视图id 0x7fa981037490还有另一个约束

<NSLayoutConstraint:0x7fa98103ba60 UIImageView:0x7fa981037490.top == UIView:0x7fa9810371d0.topMargin + 71>

看起来0x7fa981037490的顶部与视图0x7fa9810371d0的顶部加上71个点对齐

我还没有下载你的项目,但我敢打赌这就是问题所在。最佳猜测是中心.y约束无法满足,因为“对齐顶部”会将ImageView移动到打断它的位置。试着在头脑中直观地观察你在约束中设置的内容。您已与ImageView对齐,并将其中一个视图与另一个视图的边缘对齐。那将如何打破?(这是你应该问自己的)

尝试一次删除一个约束,然后生成并运行。如果警告消失,那就是需要修复的。是的,视图可能看起来很奇怪,您可以使用Command+Z逐个撤消对约束的删除

试试看。让我知道

在第二个单元格中,某些约束被禁用。这意味着将删除任何高度和宽度的约束。所以,当你们在iphone上运行应用程序时,约束条件会和你们当前的约束条件发生冲突

因此,请删除突出显示的禁用约束。

视图:

UIView:0x7fa9810371d0
,让我们将其命名为
容器

UIImageView:0x7fa9810375d0
,让我们把它命名为
image1

UIImageView:0x7fa981037490
,让我们把它命名为
image2

不,让我们检查一下约束条件

容器
高度
50
,由自动调整大小指定。高度可能不是由集合视图指定的。这很可能是在将单元格大小调整为集合视图布局指定的大小之前创建单元格时的大小

image2
位于容器顶部边缘下方的
71
点,因此至少位于容器底部边缘下方的
21

image1
底部与容器底部对齐,因此位于容器底部边缘上方

现在,您的最后一个约束将
image1
image2
垂直居中,因此显然存在碰撞

很难知道您想做什么,但我想您应该只定位相对于容器的
image1
,而
image2
的唯一垂直约束应该是垂直居中的约束

如果在Interface Builder中看到错误,请将单元格高度更改为
50
,您将看到所有内容都被分解。只是有一些不必要的约束会导致调整大小时发生冲突


还存在一些未为当前大小类安装的约束。您可能正在不同大小的模拟器上运行应用程序,并安装了它们。这意味着甚至还有一些额外的冲突。

您对UIImageView:0x7fa981037490.top==UIView:0x7fa9810371d0.topMargin+71和高度为0的父帧(因此imageview高度必须为负值,但这是不允许的)有问题,就像调用dequeueReusableCell方法之后一样。
这种情况下可能的解决方法是将嵌套视图(垂直空间-CatalogeHeaderCell-图像视图和垂直空间-CatalogeCell-信息视图)中最底部约束的优先级从1000更改为999。

尝试此操作,它有助于我在控制台中删除这些约束中断

yourCustomCell.contentView.frame = yourCustomCell.bounds;  

检查您的imageView中心约束

删除此约束。。。 这个问题是由于约束模糊而发生的。添加自动布局时,必须对imageView应用适当的自动布局约束


删除centreY约束后,如果存在歧义,那么xcode将再次显示相同的错误,再次必须删除歧义约束

尝试删除约束并添加它们。尝试使用优先级。不要添加所有约束,这样当设备布局更改时,它不会满足所有约束。错误消息说:“如果您看到的是NSAutoresizingMaskLayoutConstraints…”嗯,您看到了。这是个大问题。您可能忘了将此视图的
translatesAutoResistingMackintoContracts
设置为否(但我没有检查您的代码;仅为50个悬赏点,我不会费力地阅读您的全部代码。将您的全部代码像意大利面一样扔到墙上,希望有人为您修复,这有点粗鲁…)感谢您提供的有关翻译自动抵抗皮肤控制的提示,请查看。。。不幸的是,我不得不说,你其余的评论是不必要的,没有建设性的,甚至有点自大。。。我以前曾帮助过一些人,并将代码引用作为附加信息,任何人都可以在需要时使用,所有这些都不需要奖励。检查了您的项目-由于缺少
框架
,因此无法构建该项目。
yourCustomCell.contentView.frame = yourCustomCell.bounds;