1

嗨,目前,我正忙于我的一个项目,它具有像 Pinterest 这样的动态 UI 的概念

我需要像上图这样的 UI。为此,我已经使用UICollectionView并尝试为每个单元格提供动态高度。我无法成功实现这样的 UI。我还使用了一些自定义的,UICollectionView即“ PSCollectionView”、“ PSTCollectionView”等。

在所有示例中,我发现关于图像及其高度的一个共同点。他们都从本地源获取图像并将图像的高度存储在本地存储中,或者直接从我需要从 Web 服务器获取图像的图像中获取高度NSURL ,然后我可以为每个单元格指定高度。但是我怎样才能做到这一点?关于这个的任何想法......如果您有任何适当的解决方案,请告诉我。

参考图片如下。

在此处输入图像描述

4

4 回答 4

3

我想对我现有的具有动态图像的项目采用这种方法,并且您将获得最快的响应。

-(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;
}
于 2014-02-14T05:52:10.710 回答
1

我个人将其用于类似布局的 pinterest :

https://github.com/chiahsien/CHTCollectionViewWaterfallLayout

于 2014-02-12T09:54:07.293 回答
0

使用 UICollectionViewDelegateFlowLayout 方法

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
于 2014-02-12T09:49:52.750 回答
0

可能已经晚了,但是谁曾经试图在collectionviewcontroller中为其自定义单元格获取动态单元格高度,或者如果有人面临闪烁的问题,请确保您使用的是UICollectionViewDelegateFlowLayout中的sizeForItemAtIndexPath方法

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
于 2016-07-06T17:47:18.487 回答