首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多行UICollectionView

多行UICollectionView
EN

Stack Overflow用户
提问于 2017-02-07 10:41:41
回答 2查看 2.7K关注 0票数 0

我使用UICollectionView (UIButtons视图)预订时间:

代码语言:javascript
复制
    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)在一行:

如何设置在新行中自动移动UIViews?因此,在我的例子(iPad)中,一行将包含7 UIViews,iPhone将在一行中包含4-5 UIViews。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-07 10:47:44

为此,您需要实现UICollectionViewDelegateFlowLayout方法collectionView(_:layout:sizeForItemAt:)并将collectionViewScroll direction更改为Vertical

代码语言:javascript
复制
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)
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-02-07 10:52:01

请多使用一个流程委托方法,如下所示

代码语言:javascript
复制
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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42087702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档