我正在尝试构建一个类似于基于平铺的应用程序(有点windows风格)的应用程序,我对UICollectionView还不熟悉。
这就是我要达到的目标:
我的想法是,今天,我知道我有6个图标显示在每个单元格。但明天可能是8点、10点等。
因此,代替静态的基于6View的故事板,我想为它的灵活性有一个集合视图。
但是,我找不到如何将单元格相对于容器视图进行约束。Xcode只允许我指定基于固定点的大小。此外,即使我使用单元格之间的最小间距,我也会观察到值为0的间距。
到目前为止我所做的:
在情节提要中创建了UICollectionViewController
创建了一个小的自定义类来处理我的单元格(基本上是一个内部图像视图的出口和一个标签)
我让属性“item”和“layout”的值分别为UICollectionView属性检查器中的“1”和“Flow”(我有一个可重用的标识符)
有人能帮忙吗?
最佳答案
以下是您问题的程序化答案:
通过扩展UICollectionViewFlowLayout创建类。
在类的实现文件中,添加以下方法:
- (instancetype)init
{
self = [super init];
if (self) {
//overriding default values
self.scrollDirection = UICollectionViewScrollDirectionVertical;
self.minimumInteritemSpacing = 0;
self.minimumLineSpacing = 0;
}
return self;
}
//正确排列ur细胞的方法
- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect {
//Returns an array of UICollectionViewLayoutAttributes objects representing the layout information for the cells and views.
NSArray *attribArray = [super layoutAttributesForElementsInRect:rect];
for(int i = 1; i < [attribArray count]; ++i) {
UICollectionViewLayoutAttributes *currentLayoutAttributes = attribArray[i];
UICollectionViewLayoutAttributes *prevLayoutAttributes = attribArray[i - 1];
//No separation between the cells
NSInteger maximumSpacing = 0;
NSInteger origin = CGRectGetMaxX(prevLayoutAttributes.frame);
if((origin + maximumSpacing + currentLayoutAttributes.frame.size.width) < self.collectionViewContentSize.width) {
CGRect frame = currentLayoutAttributes.frame;
frame.origin.x = origin + maximumSpacing;
currentLayoutAttributes.frame = frame;
}
}
return attribArray;
}
//如果集合视图绑定更改,它将重新计算其所有布局属性
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
return YES;
}
将此自定义类设置为集合视图的流布局,
YourFLowLayoutCustomClass *flowlayout=[[YourFLowLayoutCustomClass alloc] init];
_collectionView=[[UICollectionView alloc]initWithFrame:frame collectionViewLayout:flowlayout];
现在,在实现了UICollectionView的类中,如果尚未实现,请实现以下方法:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(self.view.frame.size.width/2, self.view.frame.size.height/3);
}
这将根据您共享的图片设置单元格的大小。干杯!
关于ios - 使用UICollectionView的类似图块的应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36787933/