SORU
17 EKİM 2012, ÇARŞAMBA


UİCollectionView flowLayout hücreleri sarma doğru (iOS)

Bir FLowLayout UICollectionView Bir ben var. Çoğu zaman beklediğim gibi çalışır, ama her şimdi ve sonra hücreleri düzgün kaydırma değil. Örneğin, hücre olması üzerine ilk "sütun" üçüncü sıra ise aslında izleyen ikinci satır ve orada sadece bir boşluk olması gereken yere (şekle bakınız aşağıda). Bu rouge hücre gördüğünüz tüm sol tarafı (geri kalan kesiliyor) ve olması gereken yer boş.

Bu sürekli bir durum değil; her zaman aynı satırda değil. Oldu bir kez, ve sonra geri gelin ve hücre kendi kendini tamir edecek. Ya, ben basın hücresi olan alır bana sonraki Görünüm ile bir itme) ve daha sonra geri pop, ben hücredeki yanlış pozisyon ve sonra atlamak için doğru pozisyon.

Kaydırma hızı daha kolay sorunu yeniden oluşturmak için yapmak gibi görünüyor. Ben yavaş yavaş ilerleyin, hala yanlış pozisyonda hücrenin her şimdi ve sonra görebiliyorum, ama sonra doğru konuma hemen atlayacaktır.

Sorun bölümlerden parçalar ekledim başladı. Daha önce, hücre toplama sınırı (küçük veya parçalar) karşı hemen hemen aynı hizada vardı ve sorun fark etmedi. Ama bu doğru ve tahsilat sol görünüm boş olduğu anlamına geliyordu. Yani, kaydırma değil. Ayrıca, kaydırma çubuğunu sağa doğru hizada değil.

Sorun iPad 3'te hem Simülatör ve gerçekleştirebilirim.

Sorun sol ve sağ kısım parçalar yüzünden oluyor sanırım... Ama eğer değer yanlışsa, o zaman bu davranış tutarlı olması beklenir. Eğer bu Apple ile ilgili bir hata olabilir mi acaba? Ya da belki de bu girintilerin yapı ya da benzer bir şey nedeniyle

Herhangi bir çözüm/çözümler takdir edilmektedir.

Illustration of problem and settings


Takip: this answer aşağıda için Nick ile kullanıyorum6 ay12 ayŞimdi bir sorun daha olursa bu cevap herhangi bir delik - henüz bulamadım eğer orada merak ediyorsanız () olmadan 2 yıl. Aferin Nick.

CEVAP
14 Kasım 2012, ÇARŞAMBA


Belirli durumlarda bölüm parçalar içeren tek bir hücre için İKİ öznitelik nesneleri döndürmek için neden olan layoutAttributesForElementsİnRect bu UİCollectionViewFlowLayout uygulaması bir hata var. İade öznitelik nesneleri geçersiz (toplama sınırları görünümü dışında) ve diğer geçerli. Aşağıda toplama görünümün sınırları dışındaki hücrelerin dışlayarak bu sorunu çözmek için UİCollectionViewFlowLayout bir alt sınıfı.

// NDCollectionViewFlowLayout.h
@interface NDCollectionViewFlowLayout : UICollectionViewFlowLayout
@end

// NDCollectionViewFlowLayout.m
#import "NDCollectionViewFlowLayout.h"
@implementation NDCollectionViewFlowLayout
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
  NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
  NSMutableArray *newAttributes = [NSMutableArray arrayWithCapacity:attributes.count];
  for (UICollectionViewLayoutAttributes *attribute in attributes) {
    if ((attribute.frame.origin.x   attribute.frame.size.width <= self.collectionViewContentSize.width) &&
        (attribute.frame.origin.y   attribute.frame.size.height <= self.collectionViewContentSize.height)) {
      [newAttributes addObject:attribute];
    }
  }
  return newAttributes;
}
@end

Ayrıca Bkz: https://gist.github.com/4075682

Diğer cevaplar EVET shouldİnvalidateLayoutForBoundsChange dönen önermek, ama bu gereksiz recomputations neden olur ve hatta sorunu tamamen çözmez.

Benim çözüm tamamen hata çözer ve Elma kök nedeni düzeltmeler herhangi bir sorun neden olmamalıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bunnyboxx

    bunnyboxx

    17 NİSAN 2008
  • itfigueres

    itfigueres

    12 EKİM 2013
  • SellerDp

    SellerDp

    27 EKİM 2009