2017-02-07 17 views
0

我用UICollectionView(觀點與UIButtons)預訂時間:UICollectionView多行

override func viewDidLoad() { 
     super.viewDidLoad()   
     collectionViewTime.register(UINib(nibName: "TimeCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "timecell") 
     collectionViewTime.dataSource = self 
     collectionViewTime.delegate = self   
     if let layout = collectionViewTime.collectionViewLayout as? UICollectionViewFlowLayout { 
      layout.scrollDirection = .vertical 
     } 

    } 

    func numberOfSections(in collectionView: UICollectionView) -> Int { 
     return 1 
    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return Timeline.count 
    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {    
     let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout 
     let numberOfItems = CGFloat(collectionView.numberOfItems(inSection: 0)) 
     let combinedItemWidth = (numberOfItems * flowLayout.itemSize.width) + ((numberOfItems - 1) * flowLayout.minimumInteritemSpacing) 
     let padding = (collectionView.frame.width - combinedItemWidth)/2 
     return UIEdgeInsets(top: 0, left: padding, bottom: 0, right: padding) 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {    
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timecell", for: indexPath) as! TimeCollectionViewCell    
     let time = Timeline[indexPath.row][0] 
     cell.btnTime.setTitle(DateManager.dateToTime(date: time.0), for: .normal)    
     return cell 
    } 

而且我得到了在一行中的所有視圖(UIButtons): UICollectionView 我怎麼能自動設置移動UIViews在新的行? 因此,在我的情況下(iPad)一行將包含7個UIViews,iPhone將在一行中包含4-5個UIViews。

+0

UICollectionView計算它的寬度和電池寬度保持偏移量,所以說UICollectionView的寬度是320,一個單元格是200,它會顯示一個在另一個下面,所以你需要調整寬度的方式你希望它顯示單元格的方式。如果你想在這種情況下並排顯示兩個單元格寬度應該包含在UICollectionView的總寬度中 – iphonic

回答

1

對於您需要實現UICollectionViewDelegateFlowLayout方法collectionView(_:layout:sizeForItemAt:)和改變collectionViewScroll directionVertical

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let minCellSpace: CGFloat = 10 //Set minimum cell space that you want 
    if UIDevice.current.userInterfaceIdiom == .pad { 
     //For iPad return 7 cell as you mention in question 
     return CGSize(width: (collectionView.frame.size.width/7) - minCellSpace, height: yourCellHeight) 
    } 
    else { 
     //For iPhone return 4 cell, if you want to return 5 cell divide width to 5 
     return CGSize(width: (collectionView.frame.size.width/4) - minCellSpace, height: yourCellHeight) 
    } 
} 
+0

我添加了這個方法,它調用了,但視圖沒有移動到新行上 – Kirill

+0

@Kirill你需要設置collectionView的滾動方向爲垂直不水平 –

+0

請參閱我上面的代碼。我寫了layout.scrollDirection = .vertical – Kirill

0

請使用一個更加流動的委託方法如下

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize; 
------ 
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     return CGSize(width:(button width), height:button hieght); 
    }