【发布时间】:2014-09-15 23:00:39
【问题描述】:
我的问题与这个问题非常相似,尽管选择的正确答案(只是使用标签)对我不起作用(也没有任何其他答案):Changing label position in UICollectionViewCell。
我有一个带有自定义 UICollectionViewCell 的 UICollectionView。该单元格中有一个 UIView,通过 IBOutlet 属性引用。我只是试图在cellForItemAtIndexPath 方法中更改框架,虽然 UIView is 的框架实际上已更改,但它随后被忽略或不兑现。
但是,一旦 UICollectionView 稍微滚动并开始重用单元格,重用的单元格确实会遵守对 UIView 框架的先前更改,并且 UIView 看起来就像它应该的那样。因此,出于某种原因,第一次为特定单元调用 cellForItemAtIndexPath 时,会忽略帧更改,但随后会在重用该单元后兑现。
实际上,我刚刚注意到的更奇怪的是,重复使用的单元格具有先前更改的框架的 size,但保留了原始 origin,恰好是 (0, 0),尽管我正在尝试将其更新为 (0, 50)。
更改 UIView 的其他属性可以正常工作,例如更改背景颜色。可能会发生什么阻止 UIView 的框架最初更改?
【问题讨论】:
-
你是如何改变框架的?你在使用自动布局吗?
-
感谢您在此处和下方提供的反馈。我正在使用
setFrame更改框架,并且我正在使用自动布局。下面你提到使用自动布局时,直接更新约束而不是框架更好?您认为cellForItemAtIndexPath中所做的框架更改是否会被后续的自动布局操作覆盖(......但随后出于任何原因在单元重用方面受到尊重)? -
我不确定,但如果您使用自动布局,则绝对不应该设置框架。您可以尝试将其关闭,看看是否能解决问题,但我会坚持使用自动布局并更改您的代码以调整这些约束。
-
谢谢@rdelmar,我决定只更新视图的约束,它工作得很好(当然)。您想再次提交您的建议作为答案,以便我将其标记为正确吗?
标签: ios objective-c uicollectionview frame uicollectionviewcell