10

: Ben harcadımUICollectionViewFlowLayout'un tahminiItemSize kesmeleri mi?

(. DÜZENLEME. Bu iOS 8. mevcut hatayı onaylar ben kapsamlı testler yapmadığını iOS 9ile başlayan iyi çalışıyor gibi görünüyor, ama örnek çalışır) UICollectionView'ın Flow Layout kendiliğinden boyutlandırma davranışını test eden zaman. Bir çok hayal kırıklığından sonra sorun, estimatedItemSize'u sıfır olmayan bir boyuta ayarlar ayarlamaz en kısa sürede, kaydırma artık düzgün çalışmıyor. Benim örnek yerine sadece ben kod feryat yapıştırılan kopya ettik 32.

görüntüler 40 öğeleri gösteren yılında

. Swift sürümü ile başlayan birçok şeyi test ettim.

Temel olarak hesaplamak ve/veya düzgün güncellemek için başarısız düzen en collectionViewContentSize()

İşte http://git.io/AIrHNA

Herkes bana doğru yönde işaret edebilir tam bir demo nedir?

belgelerine size

@implementation ViewControllerObjcC 

static NSString * const reuseIdentifier = @"Cell"; 
-(UICollectionViewFlowLayout*)flowLayout{ 
    return (UICollectionViewFlowLayout*)self.collectionViewLayout; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier]; 
    CGSize estimatedSize = CGSizeMake(self.view.frame.size.width, 25.0); 
    BOOL testEstimatedItemSize = true; 
    if (testEstimatedItemSize) { 
    [self flowLayout].estimatedItemSize = estimatedSize; 
    }else{ 
    [self flowLayout].itemSize = estimatedSize; 
    } 

} 

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { 
    return 1; 
} 
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return 40; 
} 
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 
    UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, 30)]; 
    [cell.contentView addSubview:label]; 
    label.text = [NSString stringWithFormat:@"%ld",(long)indexPath.row]; 
    label.backgroundColor = [UIColor redColor]; 
    return cell; 
} 
+9

Hiç "estimItemSize" kullanabildiğini duyduğuma şaşırdım. Benim tecrübemde, onu kullandığımda olanların hepsi çökmem.Benim sonucum, WWDC 2014 videolarında reklamı yapılmış olsa da, kendiliğinden boyutlandırma hücrelerinin bu özelliğinin asla çevrimiçi olmadı. Bu yüzden benim tavsiyem: Bu özelliği kullanmaya çalışmayın, sadece iOS 7'de yaptığımız gibi "elle" kalem boyutuna geri dönün ve iyi olacaksınız. (Tabii ki bu konuda yanıldığımı ve çalışmaya başladığını öğrenmekten memnun olurum.) – matt

+0

Matt, değerli tavsiyeleriniz için teşekkür ederim. İlk yazıyı yazarken bana ne söylediğini tam olarak düşünüyordum. Her şeye rağmen, bu problemi araştırmak, WWDC'de çözüldüğü gibi reklam vermek benim için sinir bozucu. Bahsedildiği gibi, problemi basit bir örneğe daralttım ve altını kazmaya istekliyim. Umarım bir şeyleri kaçırırsam ve birileri bana yardım etmeme yardımcı olur. – Adrian

cevap

0

ederiz: bu özelliğin

varsayılan değer CGSizeZero olduğunu. Herhangi bir diğer değerine ayarlamak, koleksiyon görünümünün, hücrenin preferredLayoutAttributesFittingAttributes: yöntemini kullanarak, her bir hücreyi gerçek boyutu için sorgulamasına neden olur. Tüm hücreleriniz aynı yükseklikte ise, bu özelliğin yerine hücre boyutunu belirtmek için yerine itemSize özelliğini kullanın.

Projenizde bu preferredLayoutAttributesFittingAttributes: yöntemini kullanmıyor musunuz? Uygulamayı denediniz mi? Öte yandan

, bu çözüm iyi görünüyor: Apple's Document itibaren Specifying one Dimension of Cells in UICollectionView using Auto Layout

1

,

Özellikle, ekrandaki olmayan hücreler tahmin yükseklik olduğu varsayılır vardır.

Bu benim tahminim.

Tahmini yükseklik, gerçek hücre boyundan daha küçük olduğunda, koleksiyon görünümünün içerik boyutu tahmini, gerçek içerik boyutundan daha küçüktür. Bu nedenle, toplam 40 hücrenin yalnızca 32 ekranını görüntüler.

Projemde, büyük bir tahmini boyut kullanıldığında, tüm celsl değerleri gösterilir.

İlgili konular