0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】セルの間に余白を入れたい & 複数の画像の位置を条件によって調整したい

Last updated at Posted at 2020-11-20

画面構成

正面図
スクリーンショット 2020-11-20 19.28.36.png
立体図
スクリーンショット 2020-11-20 17.13.24.png

セルの構成

背景のUIView

  • UIView①を背景と見立てて、上下左右にAutoLayoutをつける
  • これにより、セルとセルの間に余白ができる
  • また、UIView.layout.cornerRadiusを調整することで角丸にできる

UIViewの中のUIView

  • 複数の画像の位置を調整するときは、UIViewのなかに入れ込むのが良い(図ではUIView②のなかにUIView③を入れている)
  • この構造を親子関係と言う(図では②が親、③が子)
  • UIViewの位置をコードで調整するときは、*UIView.frame = CGRect(x: 8, y: 8, width: 45, height: 45)*などで調整できる
  • CGRectはUIViewの位置をを調整できる
  • この関数はAutoLayoutよりも優先されるので、storyboardで設定した制約を上書きしてしまうため、扱いには注意が必要
  • パラメーターはx, y, width, height
  • 例えばこの記事では、ラベルに代入される値に応じて、赤黄青のViewの位置を変えている
    スクリーンショット 2020-11-20 19.28.36.png

なぜUIViewのなかにいれる?

  • UIViewのなかに入れることで、バラバラなViewを1つのグループとしてまとめることができる
  • 親子関係になったパーツは位置の基準が親のViewの位置になる
  • storyboardから、そのパーツの位置は数字で確認できる
    スクリーンショット 2020-11-20 19.11.55.png

セルの更新について

  • 画面が読み込まれたタイミング(viewDidload)では、セルの中身はstoryboardによって決められているので、このままではコードによってセルの内容を制御できない
  • これを解消するためには、viewDidAppearと言う関数を用いて、tableの内容をreloadする
hoge.swift
override func viewDidAppear(_ animated: Bool) {
    table.reloadData()
}
  • viewDidAppearは、全ての画面のレイアウトの処理が正常に終わった後、呼ばれる関数
  • viewDidloadとかviewDidAppearは書けば自動的に呼んでくれるが、呼ばれる順番は決まっているので、詳しくはUIViewControllerのライフサイクルを参照
  • *reloadData()*はUITableViewの関数
  • セルの内容を更新し、表示する内容を変更したいときはこの関数を呼ぶとUITableViewをリロードして、値を更新してくれる

改めて完成図

スクリーンショット 2020-11-20 19.28.36.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?