UICollectionViewCell 子视图的位置错误(自动布局)

Posted

技术标签:

【中文标题】UICollectionViewCell 子视图的位置错误(自动布局)【英文标题】:UICollectionViewCell subview have wrong position (autolayout) 【发布时间】:2015-01-11 18:23:36 【问题描述】:

我正在使用 UICollectionView 和子类单元格。单元格是从我布局几个子视图的 xib 加载的。在单元格内,我有一个 BOOL 可以更改其中一个子视图约束。在 ios 上这有效。但是在iOS 7上,约束改变后,这个子视图的位置是错误的。如果我在控制台中记录信息,则约束设置为 0,但框架显示 188。

我知道 contentView 调整大小存在错误,我通过设置自动调整大小掩码处理得很好。但是这个问题呢。

这是此子视图的约束:

所以在代码内部当BOOL设置为YES时,topConstraint从0设置为(-self.thisSubview.bounds.size.height)。

如果我记录边界高度,它会告诉我它是 130,所以 origin.x 现在应该是 -130 但实际上是 -188。

这是我更改约束的代码:

- (void)setHasInfo:(BOOL)hasInfo 
    if (hasInfo) 
        self.infoViewTopCon.constant = 0;
        [self layoutIfNeeded];
    
    else 
        self.infoViewTopCon.constant = - self.infoView.bounds.size.height + 4.0;
        [self layoutIfNeeded];
    
    _hasInfo = hasInfo;

【问题讨论】:

不知道约束很难判断。 leading = superview.leading trailing = superview.trailing height = superview.height top = superview.top 更新约束的代码是什么?请将其编辑到您的问题中 【参考方案1】:

更新NSLayoutConstraints 使其工作。

【讨论】:

你是舒尔吗?我不认为这会解决这个问题。可能我把我的问题写得很复杂。我检查了代码中的两个值(框架和约束),它显示了不同的值。我认为这对我没有帮助。 单击约束旁边的“编辑”并将它们更改为所需的值。然后更新约束。 我稍后在用户与单元格交互时更新代码中的约束。所以在 xib 中编辑约束将无济于事。在 xib 文件中,约束工作得很好。问题是当我更改代码中的一个约束时。约束值和帧值不同步。 我将它添加到我的问题的底部。

以上是关于UICollectionViewCell 子视图的位置错误(自动布局)的主要内容,如果未能解决你的问题,请参考以下文章

如何将子视图添加到自定义 UICollectionViewCell

将子视图添加到 UICollectionViewCell 时出现意外行为

使用 xib 将手势添加到 UICollectionViewCell 子视图

UICollectionViewCell 中的 UIButton 子视图不更改控件状态

自定义 UICollectionViewCell 子视图布局问题

UICollectionViewCell 的子视图的宽度和高度为零