【问题标题】:Dynamically change cell spacing UICollectionView动态改变单元格间距 UICollectionView
【发布时间】:2016-11-08 09:05:33
【问题描述】:

UICollectionView 和单元格间距存在一些问题。我想出了如何更改间距并完美地适用于我的纵向视图,但不适用于我的横向视图。我试过这个来区分:

//set minimum spacing
if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)){

    layout.minimumLineSpacing = 100.0f;
}
else{

    layout.minimumLineSpacing = 40.0f;
}

但不幸的是,当我从纵向切换到横向时,它并没有改变。谁能告诉我如何实现这一目标?

【问题讨论】:

标签: ios objective-c uicollectionview uicollectionviewcell


【解决方案1】:

试试这个

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [yourcollectionView performBatchUpdates:nil completion:nil];
}

【讨论】:

  • :/... 我应该提到我已经调用了这个函数。我在更改单元格大小时使用它。上面的代码不在它自己的函数中,而是在一个被调用的函数中。 - (void)loadView 我应该在自己的函数中使用layout.minimumLineSpacing 来返回最小间距吗?
  • 这是在定位时重新加载您的收藏视图。
  • 是的,我明白了。当我旋转设备时,我的 CollectionView 中的 Cells 大小会发生变化,但 Spacing 不会发生变化。也许我应该尝试将代码移动到它自己的返回行距的函数?
【解决方案2】:

我想通了,这正是我所怀疑的。我移动了代码以将间距创建到它自己的函数中,然后简单地根据方向返回值。代码如下:

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)
collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{

if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)){

    NSLog(@"Changed to landscape Spacing");
    return 100.0f;
}
else{

    return 40.0f;
}

}

感谢大家的帮助,你们的意见帮助我找到了解决办法,有时与某人讨论问题有助于我思考

【讨论】:

  • 您不应同时使用 layout.minimumLineSpacing 和 collectionView:layout 委托调用。它将覆盖旧的。
  • 所以你的意思是在loadView函数中去掉layout.minimumLineSpacing = 40.0f这一行?我确保在添加新功能之前将其取出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 2013-06-18
  • 2013-03-09
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多