2017-02-16 6 views
0

Я использую UICollectionView. in Collection View> Size Inspector> Min Spacing, I изменено на 0 и 1.Как удалить пространство ячеек в UICollectionView

Я хотел бы удалить любое пространство между любыми ячейками. как я могу это сделать?

enter image description here

как я могу удалить пространство между двумя ячейками без написания кода (белый пробел)?

class FirstPageViewController: UIViewController ,UICollectionViewDataSource, UICollectionViewDelegate 
.... 
    let reuseIdentifier = "cellFirstPage" 
    var items = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48","49","50"] 


    // MARK: - UICollectionViewDataSource protocol 

    // tell the collection view how many cells to make 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return self.items.count 
    } 

    // make a cell for each cell index path 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

     // get a reference to our storyboard cell 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! ViewHolderFirstMainControllerCollectionViewController 

     // Use the outlet in our custom class to get a reference to the UILabel in the cell 

     print(self.items[indexPath.item]) 
     cell.lbl_title.text = self.items[indexPath.item] 
     cell.backgroundColor = UIColor.cyan // make cell more visible in our example project 

     return cell 
    } 

    // MARK: - UICollectionViewDelegate protocol 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     // handle tap events 
     print("You selected cell #\(indexPath.item)!") 
    } 

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

Если я не могу без использования кода для записи, напишите быстрый код.

+0

http://stackoverflow.com/a/40261279/4601170 –

+0

Проверьте это разместите http://stackoverflow.com/questions/40131349/enforce-collectionview-to-have-only-2-rows/40133928#40133928 и установите все интервалы равными нулю. – Joe

ответ

0

Вам необходимо увеличить ширину ячейки, чтобы удалить расстояние между ячейками. Или вы можете создать 3 ячейки в одной строке. Попробуйте

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: view.bounds.width/2 - 2, height: *yourcustomheightforcell*) 
} 
0

Вам необходимо установить размер элемента и изменить расположение вида коллекции.

Попробуйте этот код

private let minItemSpacing: CGFloat = 8 
private let itemWidth: CGFloat  = 100 
private let headerHeight: CGFloat = 32 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    // Create our custom flow layout that evenly space out the items, and have them in the center 
    let layout = UICollectionViewFlowLayout() 
    layout.itemSize = CGSize(width: itemWidth, height: itemWidth) 
    layout.minimumInteritemSpacing = minItemSpacing 
    layout.minimumLineSpacing = minItemSpacing 
    layout.headerReferenceSize = CGSize(width: 0, height: headerHeight) 

    // Find n, where n is the number of item that can fit into the collection view 
    var n: CGFloat = 1 
    let containerWidth = collectionView.bounds.width 
    while true { 
     let nextN = n + 1 
     let totalWidth = (nextN*itemWidth) + (nextN-1)*minItemSpacing 
     if totalWidth > containerWidth { 
      break 
     } else { 
      n = nextN 
     } 
    } 

    // Calculate the section inset for left and right. 
    // Setting this section inset will manipulate the items such that they will all be aligned horizontally center. 
    let inset = max(minItemSpacing, floor((containerWidth - (n*itemWidth) - (n-1)*minItemSpacing)/2)) 
    layout.sectionInset = UIEdgeInsets(top: minItemSpacing, left: inset, bottom: minItemSpacing, right: inset) 

    collectionView.collectionViewLayout = layout 
} 
0

Этот волшебный код работает для меня, 3 ячейки в каждой строке,

var gridWidth_Height: Float 

gridWidth_Height = floorf((self.view.frame.size.width - 24.0)/3.0) 



override func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    return CGSize(width: CGFloat(gridWidth_Height), height: CGFloat(gridWidth_Height)) 
} 

override func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionat section: Int) -> CGFloat { 
    return 5.0 
} 

    override func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionat section: Int) -> CGFloat { 
    return 5.0 
} 
// Layout: Set Edges 

override func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionat section: Int) -> UIEdgeInsets { 
    return UIEdgeInsetsMake(7.0, 7.0, 7.0, 7.0) 
    // top, left, bottom, right 
} 
Смежные вопросы