: 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;
}
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
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