在 UICollectionViewCell 的子视图上调用 removeFromSuperview 在第一次加载时不起作用,仅当单元格被重用时
Calling removeFromSuperview on subview in UICollectionViewCell does not work on first load, only when cell is reused
我有一个包含多个子视图的集合视图单元格。我想完全删除其中一个子视图,以便相邻的子视图可以扩展以通过约束填充 space。
这个约束配置在故事板的原型单元中设置,子视图已经在原型中,准备在单元实例化后移除。
我的 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
第一次加载时,子视图没有被删除。 一旦我将单元格滚动到屏幕外并返回到它,子视图已按预期删除。所以我假设当我第一次设置 属性 时,单元格没有完全布局存在某种问题。
如何让它工作?
我认为此时视图尚未布局,因此无法删除子视图。尝试用不同的方法删除它,例如;
- (void) didMoveToSuperview
{
if (!self.aThing)
{
[self.thingContainerView removeFromSuperview];
}
}
这将在您的集合视图单元格中被覆盖。
可能有更合适的方法来调用它,但这应该有效。
我有一个包含多个子视图的集合视图单元格。我想完全删除其中一个子视图,以便相邻的子视图可以扩展以通过约束填充 space。
这个约束配置在故事板的原型单元中设置,子视图已经在原型中,准备在单元实例化后移除。
我的 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
第一次加载时,子视图没有被删除。 一旦我将单元格滚动到屏幕外并返回到它,子视图已按预期删除。所以我假设当我第一次设置 属性 时,单元格没有完全布局存在某种问题。
如何让它工作?
我认为此时视图尚未布局,因此无法删除子视图。尝试用不同的方法删除它,例如;
- (void) didMoveToSuperview
{
if (!self.aThing)
{
[self.thingContainerView removeFromSuperview];
}
}
这将在您的集合视图单元格中被覆盖。
可能有更合适的方法来调用它,但这应该有效。