具有动态高度的 UICollectionViewCell 使用 NSURL 进行图像下载
Posted
技术标签:
【中文标题】具有动态高度的 UICollectionViewCell 使用 NSURL 进行图像下载【英文标题】:UICollectionViewCell with Dynamic height having the use of NSURL for Image downloading 【发布时间】:2014-02-12 09:38:43 【问题描述】:嗨,目前,我正忙于我的一个有这个概念的项目 像 Pinterest 这样的动态 UI
我需要像上图这样的 UI。为此,我使用了UICollectionView
并尝试给出动态高度
对于每一个细胞。我无法获得任何成功来实现像这样的 UI
这。我还使用了一些自定义的UICollectionView
,即
“PSCollectionView
”、“PSTCollectionView
”等。
在所有示例中,我发现关于图像及其
高度。他们都从本地来源获取图像并存储
本地存储中图像的高度或直接从
我需要使用 NSURL
从 Web 服务器获取图像的图像
然后我可以给每个单元格的高度..但是我怎么能
做这个?关于这个的任何想法......如果你有任何想法请告诉我
适当的解决方案。
参考图片如下。
【问题讨论】:
您从哪里获得网络服务?我的意思是这是来自公共来源吗? @Nilesh 你有动态单元格大小吗?我也想和你一样。但我也将标签与该图像相加。 【参考方案1】:对于我现有的具有动态图像的项目,我想采用这种方法,并且您将获得最快的响应。
-(void)fillSizeArray
for (int i=0; i<[self.arrGCCategory count]; i++)
NSNumber *width = [NSNumber numberWithFloat:200];
NSNumber *height = [NSNumber numberWithFloat:200];
NSString *urlString = [[self.arrGCCategory objectAtIndex:i] valueForKey:@"Photo"];
NSURL *imageFileURL = [NSURL URLWithString:urlString];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageFileURL, NULL);
if (imageSource)
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache, nil];
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options);
if (imageProperties)
width = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
height = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
NSLog(@"Image dimensions: %@ x %@ px", width, height);
CFRelease(imageProperties);
CGSize size = CGSizeMake([width floatValue], [height floatValue]);
[self.cellHeights addObject:[NSValue valueWithCGSize:size]];
#pragma mark - CHTCollectionViewDelegateWaterfallLayout
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
CGSize size = [[self.cellHeights objectAtIndex:indexPath.row] CGSizeValue];
return size;
【讨论】:
【参考方案2】:我个人将它用于类似 pinterest 的布局:
https://github.com/chiahsien/CHTCollectionViewWaterfallLayout
【讨论】:
感谢您的建议,但我已经在我的项目中使用了它。目前,我正在处理来自网络服务器的可变高度图像。【参考方案3】:使用 UICollectionViewDelegateFlowLayout 方法
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
【讨论】:
【参考方案4】:可能已经晚了,但是谁曾试图在 collectionviewcontroller 中为其自定义单元格获取动态单元格高度,或者如果有人面临闪烁的问题,请确保您使用的是 UICollectionViewDelegateFlowLayout 中的 sizeForItemAtIndexPath 方法
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
【讨论】:
以上是关于具有动态高度的 UICollectionViewCell 使用 NSURL 进行图像下载的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中创建具有动态 tableview 高度的动态 tableview 单元格
UICollectionViewCell 具有 2 列网格和动态高度
UITableViewCell 具有嵌入式垂直堆栈视图设置,具有自动布局和动态高度