if #available()
を書かないといけないです。そうすると結局2つのコードベースをメンテするのであまり嬉しくない。(そうは言ってもクラスが違うだけの同じコードになるから格段に楽ではある) 今考えているのはクラスにPrefixを付けて、それで書くようにしてもらって、iOS 13なら標準のAPIを、iOS 12以下ならライブラリのAPIにフォールバックする、という風にしようかと思いますがあまり気に入ってないのでlet itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1)) let item = NSCollectionLayoutItem(layoutSize: itemSize) let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(44)) let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) let section = NSCollectionLayoutSection(group: group) let layout = UICollectionViewCompositionalLayout(section: section) let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) ...
^ これでiOS 13でも12以前でもうまく動く(iOS 13では標準のAPIを使う)。Xcode 10ならうまく動きそう。Xcode 11でビルドしようとするとダメ。 現在は妥協して以下のように書くようにしようかと考えています。 (edited)let itemSize = IBPNSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1)) let item = IBPNSCollectionLayoutItem(layoutSize: itemSize) let groupSize = IBPNSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(44)) let group = IBPNSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) let section = IBPNSCollectionLayoutSection(group: group) let layout = IBPUICollectionViewCompositionalLayout(section: section) let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) ...
IBP
プレフィックスをつける。美しくないし、あまり理解してもらえない気がする。