2015-04-04 12 views
13

Dikey veya yatay yönlerde hücreler arasında boşluk bırakmayan bir FlowLayout ile bir UICollectionView kurdum.UICollectionView 3 sütun ızgarası, 1 piksel alan ?? (image dahil)

Her şey çalışıyor, ancak 2. ve 3. sütun arasında tek bir 1px alanı var ve neden olduğunu bilmiyorum !? Hem iOS simülatöründe hem de gerçek bir cihazda 1px aralıklarını doğruladım. Bunu kimse yaşadı mı? Ben herhangi bir boşluğu kaldırmak için gerekli fonksiyonları hayata (ve onlar çalıştıran baskı ifadelere doğrulanmış) var

class MyViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout

yanı sıra görsel:

Benim UIViewController bir temsilci/şunlardan veri kaynağı olan hücrelerin onay birbirine sıraya:

Son olarak
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { 
    return UIEdgeInsetsZero 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat { 
    return 0 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { 
    return 0 
} 

, bir hücrenin genişliğini, basılmış olan iade edilen (her renk kare) buolduğunu doğrulamak içinveya (320/3), benzer durumlarda 106,666667

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

    var totalHeight: CGFloat = (self.view.frame.width/3) 
    var totalWidth: CGFloat = (self.view.frame.width/3) 

    println(totalWidth) // this prints 106.666666667 

    return CGSizeMake(totalWidth, totalHeight) 
} 

enter image description here

+0

Bunu çözmek için aşağıdakilerden daha iyi bir çözüm buldunuz mu? – BlueBoy

+0

@BlueBoy Yapmadım. Gittiğim çözüm, iki sütunu bir tavanı veya zemini (genişlik/3) yapmak ve daha sonra üçüncü sütunu geri kalanına ayarlamaktır. – Alex

+0

Sütunlardan sadece iki tane tavanı nasıl yaparsınız? – BlueBoy

cevap

5

Daha önlemek Buradaki sayı çifte tipi olan. Kullanım:

return CGSizeMake(ceil(totalWidth), ceil(totalHeight)) 
+0

Ama hücrelerin boyutlarının (genişlik ve yükseklik) yüzmesini istemiyorum mu? Bu kodu uygularken satır başına sadece 2 hücre görünür, çünkü 107 + 107 + 107 = 321, yani> 320 genişlik görünümüdür. – Alex

+2

En az 107 + 107 + (320-214) – dimpiax

+0

Doğru - Bu işe yarıyor ... ama neden CGSizeMake beri bu konu CGFloats girdi parametreleri olarak alır? – Alex

2
ben de aynı sorunu vardı

, aşağıda kodla sabit:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

    let paddingSpace = sectionInsets.left * 4 
    let availableWidth = view.frame.width - paddingspace 
    let widthPerItem = availableWidth/3 

    return CGSizeMake(width: widthPerItem, height: widthPerItem) 
} 

ve sınıfın başlamak aşağıda değişken tanımlamak:

fileprivate let sectionInsets = UIEdgeInsets(top: 0.0, left: 0.5, bottom: 0.0, right: 0.0) 
0

İşte benim çözüm benim çözüm genişlik 106 orta koleksi ve diğer iki yöntem koleksiyonuViewView düzeni

NSInteger numColumns = 3; 
CGSize deviceSize; 
CGFloat width = self.view.frame.size.width/numColumns; 
CGFloat height = width ; 
NSInteger rem = (int)self.view.frame.size.width%numColumns; 
if(indexPath.row == (1 + numColumns*counter) && rem != 0) { 

    deviceSize = CGSizeMake(floor (width), ceil(height)); 
    counter++; 
} 
else { 

    deviceSize = CGSizeMake(ceil (width), ceil(height)); 
} 
deviceSize = CGSizeMake(deviceSize.width, deviceSize.height); 
İlgili konular