2017-02-07 3 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:) и изменить collectionView «s Scroll direction к Vertical

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 Вам необходимо установить направление прокрутки коллекцииView вертикальный не горизонтальный –

+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); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^