2017-12-11 8 views
0

私は毎月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)です。しかし、それは次のようになり、画面上:

enter image description here

そして、これはiPhone SEの結果である:

enter image description here

私はプログラム的に間隔レイアウト設定を試してみましたが、それは解決しません。誰かが私がどこでばかげているのか、7等分が画面上でどのように8または6に変わっているのかを説明できますか?

更新。私はViewControllerのメインビューから幅を計算しようとしました:itemWidth = (view.frame.width-32)/7(32はセーフエリアのインセットの合計です - 2 * 16)。スペースはゼロですが、この問題は8または8plusのような大画面では解決されましたが、SEでは週に6日も表示され、項目間の間隔が強制されます。この時点では、私はレイアウトロジックを全く理解していません!

+0

'tableView.frame.width'の代わりに' collectionView.frame.width'を使用してみてください。また、アイテムと行の間隔が0であると言うと、 'minimumLineSpacingForSectionAt'と' minimumInteritemSpacingForSectionAt'メソッドで0を返していますか? – kbunarjo

+0

はい、これらのメソッドでIBとコードの両方に0の間隔が設定されています。私はcollectionViewの幅を使用してみました - 同じ結果。 –

+0

コレクションビューのアイテムサイズを取得した後、テーブルビュー/コレクションビューの幅が変化しますか?あなたはそれをチェックすることができます!さもなければコードは機能するはずです – torap

答えて

0

2日後にわかったことは、異なる画面幅を7で割ると、浮動小数点の結果としてあいまいさが生じることです。 SEの320ポイントの画面では、0.00000001がなければならず、何もせずに7つの等しいサイズのセルに間隔を置くことはできません。

だから、私のためにこの問題を回避するには、結果のitemWidthフローリングた:これは、すべての画面サイズで予測可能な結果を​​与える

itemWidth = CGFloat(floor(Double(view.frame.width-32)/7)) 

- 毎週、今7日を持っています。

関連する問題