启用分页功能的UICollectionView Center单元格
一直尝试使用UICollectionView
对齐我的单元格并启用分页功能。不幸的是,当尝试这样做时,我永远无法让细胞在中心对齐。当我滚动收集时,细胞总是稍微偏离。我试图为纵向和横向视图做到这一点。香港专业教育学院使用的插图被尝试和中心的细胞和它们的位置:启用分页功能的UICollectionView Center单元格
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
CGFloat cellSpacing = ((UICollectionViewFlowLayout *) collectionViewLayout).minimumLineSpacing;
CGFloat cellWidth = ((UICollectionViewFlowLayout *) collectionViewLayout).itemSize.width;
NSInteger cellCount = [collectionView numberOfItemsInSection:section];
CGFloat inset = (collectionView.bounds.size.width - ((cellCount) * (cellWidth + cellSpacing))) * 0.5;
inset = MAX(inset, 0.0);
if(UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)){
return UIEdgeInsetsMake(50.0,inset,0.0,inset); // top, left, bottom, right
}
else{
return UIEdgeInsetsMake(50.0,inset,0.0,inset); // top, left, bottom, right
}
}
我再变线间距:
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)
collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
CGFloat cellSpacing = ((UICollectionViewFlowLayout *) collectionViewLayout).minimumLineSpacing;
CGFloat cellWidth = ((UICollectionViewFlowLayout *) collectionViewLayout).itemSize.width;
NSInteger cellCount = [collectionView numberOfItemsInSection:section];
CGFloat inset = (collectionView.bounds.size.width - ((cellCount-1) * (cellWidth + cellSpacing))) * 0.5;
inset = MAX(inset, 0.0);
if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)){
NSLog(@"Changed to landscape Spacing");
return inset;
}
else{
return inset;
}
我的细胞的大小都在这里设置:
-(CGSize)
collectionView:(UICollectionView *) collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
//Set Landscape size of cells
if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)){
CGFloat cellWidth = [[UIScreen mainScreen] bounds].size.width-360;
CGFloat cellHeigt = [[UIScreen mainScreen] bounds].size.height-60;
NSLog(@"Is Landscape");
return CGSizeMake(cellWidth, cellHeigt);
}
//Set Potrait size of cells
else{
CGFloat cellWidth = [[UIScreen mainScreen] bounds].size.width-60;
CGFloat cellHeigt = [[UIScreen mainScreen] bounds].size.height-160;
NSLog(@"Is Portrait");
return CGSizeMake(cellWidth, cellHeigt);
}
}
而不是尝试以编程方式设置框架,您可以简单地设置单元格占用整个宽度UICollectionView
并使用autoLayout将内容居中,这样您就不必考虑界面变化和不同屏幕尺寸作为autoLayout将为您处理。在您的数据源,
-(CGSize)
collectionView:(UICollectionView *) collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
return CGSizeMake(collectionView.bounds.size.width, collectionView.bounds.size.height)
}
设置你的所有项目间的间距为0,并启用分页为UICollectionView
接下来只需使用的autoLayout设置内容到细胞内中心!
是的,正如我想要的,感谢您的帮助:) –
试试这个。你必须采取UICollectionViewFlowLayout
并设置它的滚动方向,最小空间并附加到集合视图布局。
UICollectionViewFlowLayout *flowLayout;
- (void)viewDidLoad {
[super viewDidLoad];
flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
flowLayout.minimumInteritemSpacing = 0.0;
flowLayout.minimumLineSpacing = 0.0;
_obj_CollectionView.pagingEnabled = YES;
_obj_CollectionView.collectionViewLayout = flowLayout;
}
如果你想垂直滚动修改它。
希望它能起作用。
谢谢,我会给这个镜头 –
您是否已启用对属性检查器中集合视图的分页?而不是使用像360或60这样的幻数,您应该使用相对于屏幕大小的值,即基于屏幕宽度/高度的分割(因为它可能会在具有不同屏幕大小的设备上失败)。 – Rikh
是的,我使用这些'魔术'数字,以便我可以为单元格获得合适的大小。你会如何建议我获得最好的细胞大小?至于分页,我通过集合代理启用它。 'coll.pagingEnabled = YES;' –
嗯,我不确定你试图达到什么,但不是试图操纵单元格的内容视图(因为它留下了错误空间),我只是简单地设置单元格为整个屏幕宽度,然后使用autoLayout将其内容居中。如果您可以发布您想要实现的图像,也许我可以提供帮助! – Rikh