在我的iPhone应用程序,我展示一个集合视图图像。 我从URL中获取图像,用网址我得到的图像大小也。 例如: - 假设有两种图像景观和portrait.I得到值P人像图像和L景观图片
如何自定义的CollectionView单元格的大小?
在我的iPhone应用程序,我展示一个集合视图图像。 我从URL中获取图像,用网址我得到的图像大小也。 例如: - 假设有两种图像景观和portrait.I得到值P人像图像和L景观图片
如何自定义的CollectionView单元格的大小?
使用此UICollectionViewDelegateFlowLayout
方法
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
1)你可以维护和换出多个布局对象,但有一个简单的方法。 只需添加以下到您的UICollectionViewController子类,并根据需要调整大小:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
// Adjust cell size for orientation
if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
return CGSizeMake(170.f, 170.f);
}
return CGSizeMake(192.f, 192.f);
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[self.collectionView performBatchUpdates:nil completion:nil];
}
调用-performBatchUpdates:completion:
将布局失效,并与动画调整细胞(你可以通过零到两个块PARAMS如果你已经没有多余的调整来执行)。
2)代替硬编码的商品尺寸的-collectionView:layout:sizeForItemAtIndexPath
,只是要适应在屏幕上的细胞数除以身高或的CollectionView边界的宽度。 使用高度,如果你的UICollectionView
水平滚动还是宽度,如果它垂直滚动。
这是我做的。 我首先设置根据屏幕的大小(这样我们就可以得到图像的各行上最好的数字)的单元格的大小。 您可能要更改号码,以满足您的事业。
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
CGFloat widthOfCell =(self.view.frame.size.width-30)/2;
CGFloat heightOfCell =widthOfCell * 1.33;
CGSize returnValue = CGSizeMake(widthOfCell, heightOfCell);
returnValue.height += 5;
returnValue.width += 5;
return returnValue;
}
然后我用的图像处理方法来确定横向或纵向的状态,(我的应用程序),我决定让每一个形象的肖像:
if (sourceImage.size.width>sourceImage.size.height) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
如果你想拥有它倒过来,交换>
与<
警告:我的旋转方法没有考虑到如果图片指向左边或右边。 换句话说,如果图像是由景观倒挂,我的代码无法识别。 我希望有人能够帮助你,虽然,我希望我还没有偏离轨道! :)
对于迅速扩大的FlowLayout到你的ViewController,如果你需要显示对细胞的动态图像使持有图片命名为您的视图contorller并使用这个变量:
let imageData = ["image1","image2","image3","image4"]
extension yourViewController: UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let photo = UIImage(named: imageData[indexPath.row])
return CGSize(width: (photo?.size.width)!, height: (photo?.size.height)!)
}
}