2016-11-08 177 views
1

UICollectionView和单元格间距有些问题。我想出了如何改变间距,并完美适用于我的肖像视图,但不适合我的横向视图。我试图区分:动态更改单元格间距UICollectionView

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

    layout.minimumLineSpacing = 100.0f; 
} 
else{ 

    layout.minimumLineSpacing = 40.0f; 
} 

但不幸的是,当我从肖像切换到风景时,它不会改变。任何人都可以告诉我如何实现这一目标?

+0

你需要的,如果你想重新加载您的收藏视图调用数据源或委托方法的收集视图 – Rajat

+0

这应该回答你的问题:[http://stackoverflow.com/questions/18988028/how-do-i-define-the-size-of-a-collectionview-on-rotate ](http://stackoverflow.com/questions/18988028/how-do-i-define-the-size-of-a-collectionview-on-rotate) –

+0

问题不是单元格的大小,而是间距时其在横向视图。我需要每个单元格单独,然后分页去第一个调用[layout invalidateLayout]的下一个单元格 –

回答

0

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

-(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; 
} 

} 

感谢您的帮助球员,你输入帮我找到一个孤子,有时讨论与某人的问题帮我觉得

+0

你不应该同时使用layout.minimumLineSpacing和collectionView:layout委托调用。它会覆盖较旧的一个。 – kaushal

+0

所以你的意思是在'loadView'函数中取出'layout.minimumLineSpacing = 40.0f'这行?我确定在添加新功能之前,我已经将其解决了 –

0

试试这个

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

:/ ...我应该提到我已经调用这个函数。我改变我的细胞大小时使用它。上面的代码不是在它自己的函数中,而是在一个被调用的函数中。 ' - (void)loadView'应该在它自己的函数中有'layout.minimumLineSpacing',它返回最小间距? –

+0

这是用于重新加载您的收藏视图,而方向。 – KKRocks

+0

是的,我明白。当我旋转设备my ** Cells **在我的** CollectionView **中改变大小,但不是**间距**。也许我应该尝试将代码移动到它自己的函数返回行距? –

相关问题