1

こんにちは、現在、Pinterest のような動的 UI のコンセプトを持つプロジェクトの 1 つに取り組んでいます。

上の画像のようなUIが必要です。このために、私は使用UICollectionViewして、すべてのセルに動的な高さを与えようとしました。このようなUIを実現することはできませんでした。UICollectionViewまた、 「PSCollectionView」、「PSTCollectionView」などのカスタマイズされたものも使用しました。

すべての例で、画像とその高さに関する 1 つの共通点を見つけました。それらはすべてローカルソースから画像を取得し、画像の高さをローカルストレージに保存するか、使用してWebサーバーから画像を取得する必要がある画像から高さを直接取得しNSURL 、すべてのセルに高さを与えることができます..しかしこれどうやってするの?これについて何か考えがあります...適切な解決策があれば教えてください。

以下に参考画像を掲載します。

ここに画像の説明を入力

4

4 に答える 4

3

動的な画像を含む既存のプロジェクトにこのアプローチを採用したいと思います。もう 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;
}
于 2014-02-14T05:52:10.710 に答える
1

私は個人的にレイアウトのようなピンタレストにこれを使用しました:

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 に答える