我有一个包含多个子视图的集合视图单元格。我希望完全删除其中一个子视图,以便相邻的子视图可以扩展以通过约束填充该空间。
这个约束配置在故事板中的原型单元格内设置,子视图已经在原型中就位,准备好在单元格实例化后删除。
我的UICollectionViewCell
子类有一个执行此操作的setter:
- (void)setThing:(NSString *)aThing
{
if (!aThing)
{
[self.thingContainerView removeFromSuperview];
return;
}
// proceed if aThing exists
当设置单元格时:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"mycellid" forIndexPath:indexPath];
cell.aThing = nil; //this should trigger removal of one of the cell's subviews
return cell;
}
问题是首次加载UICollectionViewCell
时,子视图尚未删除。一旦我将屏幕上的单元格滚动并返回给它,则子视图已被删除按预期删除。因此,当我第一次设置属性时,我认为单元格没有完全布局存在某种问题。
如何让它发挥作用?
答案 0 :(得分:1)
我不认为该视图已经布局,因此无法删除子视图。尝试使用其他方法删除它,例如;
- (void) didMoveToSuperview
{
if (!self.aThing)
{
[self.thingContainerView removeFromSuperview];
}
}
这将在您的集合视图单元格中被覆盖。
可能有一种更合适的方法来调用它,但这应该有效。