私は毎月UITableViewのセル内に埋め込まれたUICollectionViewであるアプリケーション用のカレンダーを作成しています。 TableViewは画面のセーフエリアに固定されているため、先頭および末尾の拘束は画面の左右の端から16になります。 UICollectionViewはテーブルセルのContentViewに固定されています。UICollectionViewは項目サイズを指定できません
CollectionView内のアイテムとアイテムの間の間隔とセクションのインセットはすべて0に設定されています。したがって、7日間連続で取得するには、itemWidth = tableView.frame.width/7
を使用します。次に、この値をDelegateFlowLayout
プロトコルのsizeForItem()
メソッドで幅と高さの両方に設定しました。
実行時に、すべての値が正しく計算されます。たとえば、iPhone 8の画面テーブルの幅は343、itemWidthは49、itemSizeは(49、49)です。しかし、それは次のようになり、画面上:
そして、これはiPhone SEの結果である:
私はプログラム的に間隔レイアウト設定を試してみましたが、それは解決しません。誰かが私がどこでばかげているのか、7等分が画面上でどのように8または6に変わっているのかを説明できますか?
更新。私はViewControllerのメインビューから幅を計算しようとしました:itemWidth = (view.frame.width-32)/7
(32はセーフエリアのインセットの合計です - 2 * 16)。スペースはゼロですが、この問題は8または8plusのような大画面では解決されましたが、SEでは週に6日も表示され、項目間の間隔が強制されます。この時点では、私はレイアウトロジックを全く理解していません!
'tableView.frame.width'の代わりに' collectionView.frame.width'を使用してみてください。また、アイテムと行の間隔が0であると言うと、 'minimumLineSpacingForSectionAt'と' minimumInteritemSpacingForSectionAt'メソッドで0を返していますか? – kbunarjo
はい、これらのメソッドでIBとコードの両方に0の間隔が設定されています。私はcollectionViewの幅を使用してみました - 同じ結果。 –
コレクションビューのアイテムサイズを取得した後、テーブルビュー/コレクションビューの幅が変化しますか?あなたはそれをチェックすることができます!さもなければコードは機能するはずです – torap