UIKit

UIKit

執筆済 ソフトウェア開発iOS

iOS の命令的な UI フレームワーク。2008 年から。

構成#

UIApplication
 └ UIWindow
     └ UIViewController      画面 1 つ分を管理する
         └ UIView (階層)

UIViewController が中心で、 ライフサイクル、レイアウト、遷移を担う。

ライフサイクル#

init → loadView → viewDidLoad          (1 回だけ)
     → viewWillAppear → viewDidAppear   (表示のたび)
     → viewWillDisappear → viewDidDisappear

viewDidLoad1 回しか呼ばれない。 表示のたびに更新したいものは viewWillAppear に置く。 この区別を誤ると「戻ってきたら古いデータのまま」になる。

レイアウト#

方式 内容
frame 座標を直接指定する。単純だが柔軟性が無い
Auto Layout 制約を宣言し、解に基づいて配置する
Stack View 並べる方向と間隔だけ指定する

Auto Layout は制約の充足問題を解く (Cassowary という線形制約ソルバに基づく)。 制約が足りないと不定になり、 多すぎると矛盾する。 曖昧・矛盾のどちらもコンソールに警告が出る。

セル再利用#

UITableViewUICollectionView は 画面外のセルを使い回す。

swift
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")

10 万件でも数十個のセルしか作らない。 再利用されるので、状態を必ず初期化する必要がある。 これを忘れると、スクロール時に前の内容が残る。

SwiftUI との関係#

相互運用できる。 UIKit は成熟していて細かい制御が効くため、 SwiftUI で困った部分だけ降りる、という使い方が現実的。

参考文献#

ノート一覧を閉じる