万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    UICollectionViewCompositionalLayoutはUICollectionViewFlowLayoutと競合するもの

    iOS 13から登場した以下の方法

    ※今回 _ にしているが、実際の値は(sectionIndex, environment)

            self.collectionView.collectionViewLayout = UICollectionViewCompositionalLayout { _, _ in
                // セルの高さ
                let cellHeight: CGFloat = 54.0
                // セルの上下左右共通の隙間の大きさ
                let cellSpacing: CGFloat = 5.0
                let height = LanguageSelectListViewController.cellHeight
                // サイズとレイアウトアイテムを作成
                let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(height)) // ここで高さを指定
                let item = NSCollectionLayoutItem(layoutSize: itemSize)
    
                // グループを作成
                let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(height)) // ここで高さを指定
                let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
    
                // セクションを作成
                let section = NSCollectionLayoutSection(group: group)
                section.interGroupSpacing = spacing
                section.contentInsets = NSDirectionalEdgeInsets(top: spacing, leading: spacing, bottom: spacing, trailing: spacing)
    
                return section
            }

    ただしその方法をすると UICollectionViewDelegateFlowLayoutdelegateが動かない。

    以下をすると、

        override func viewDidLoad() {
            super.viewDidLoad()
    
            let flowLayout = UICollectionViewFlowLayout()
            collectionView.collectionViewLayout = flowLayout
            collectionView.collectionViewLayout.collectionView?.delegate = self
        }

    いかが呼べる

    extension MyViewController: UICollectionViewDelegateFlowLayout {
        // このデリゲートメソッドを実装
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            if indexPath.section == 0 && indexPath.item == 2 {
                return CGSize(width: collectionView.frame.width, height: 200)
            }
            return CGSize(width: collectionView.frame.width, height: 100)
        }
    }