未分類

collectionViewで均等なマス目を作る

投稿日:2020年7月28日 更新日:

セル同士を0.5の線で区切りたいが、所々太くなってしまっている。
ボーダーを非表示にすると、わずかな隙間ができている。
セル同士の隙間を0にすることで、綺麗な0.5のボーダーにしたい。

//セルの大きさ・隙間を調整する関数
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        
        let width: CGFloat = self.view.bounds.width / 7
        let height : CGFloat = width * 1.5
        return CGSize(width: width, height: height)
    }

 

解決策

画面の幅を7で割ると余りが出てしまうのが原因らしい。
余ったピクセルを1pxずつ前から順にセルに割り当てるとよい。

以下のように書き換えた。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                
        let columns = 7
        let width = Int(UIScreen.main.bounds.width)
        let side = width / columns
        let rem = width % columns
        let addOne = indexPath.row % columns < rem
        let cellWidth = addOne ? side + 1 : side
        return CGSize(width: cellWidth, height: side)
    }

参考:https://stackoverflow.com/questions/29441547/uicollectionview-3-column-grid-1px-space-image-included

さらにセルの縦幅を横幅の1.5倍にしたい。
このままsideを1.5倍すると、Int型とDouble型の計算ができないためエラーとなる。
そこでInt型からDouble型に変換する。
CGsizeもwidthとheightの型を合わせる必要があるから、横幅もDouble型に変換する。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        
        let columns = 7
        let width = Int(UIScreen.main.bounds.width)
        let side = width / columns
        let rem = width % columns
        let addOne = indexPath.row % columns < rem
        let cellWidth = addOne ? side + 1 : side
        //Double型に変換
        let dSide:Double = Double(side)
        let dCellHeight = dSide * 1.5
        let dCellWidth:Double = Double(cellWidth)
        return CGSize(width: dCellWidth, height: dCellHeight)
    }

参考:https://i-app-tec.com/ios/int-string-double.html#5

-未分類

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

プレミアプロ講座応用編3_シェイプやイラストを使ったテロップ

背景や下線のあるテロップ シェイプを追加するだけ。 位置や不透明度等でアニメーションをつけられる。 イラストを使う イラストを使う時に「クロップ」(画像をトリミングする機能)というエフェクトを使う。

no image

配列の作り方

配列の作り方 ・宣言する var abcdBox = [String]() ・宣言時に配列の要素を入れておく var abcdBox = [“a”,”b”,”c”,”d”] ・要素を1つだけ追加する …

自動字幕生成「Vrew」使い方

ファイル→新しい動画で始める で読み込み開始 ショートカット 次のクリップへ移動:tab 前のクリップへ移動:tab + shift 再生/停止:command + P 結合・分割 クリップの分割した …

プレミアプロ講座応用編1_カットとテロップ入れ

ショートカットキー 変更後の設定 カットで使うショートカット レザーツールでカットしてリップル(空白)を削除するよりショートカットを使った方が時短できる。   ・全てのクリップに一括でカット …

no image

アイコン下のアプリ名だけ変更する方法

プロジェクト名などは変えずに、ホーム画面のアイコン下に表示されるアプリ名だけを変更する方法。 Genelal(名前とは設定するところ)→info→ +でBundle display nameを追加し、 …