iOS
Swift

UIViewのビューとレイアウトを分離する「MOAViewLayout」

More than 3 years have passed since last update.


MOAViewLayout


MOAViewLayoutとは?

UIView を拡張したことで簡潔にレイアウト部分の実装を可能にしたiOS用のモジュールです。


このモジュールでレイアウト部分を実装することにより、ビューとレイアウトの実装を分離することができます。


ダウンロード

https://github.com/MO-AI/MOAViewLayout


使い方


1.ダウンロードした以下ファイルをプロジェクトに追加


  • MOAViewLayout.swift

  • UIView+MOAViewLayout.swift


2.MOAViewLayoutオブジェクトの実装

let layout = MOAViewLayout()

let barHeight : CGFloat = 40

// ヘッダー部分のレイアウトを実装
layout["header"] = {
view, orientation in
return CGRectMake(
0,
0,
view.bounds.size.width,
barHeight
)
}

// フッター部分のレイアウトを実装
layout["footer"] = {
view, orientation in
return CGRectMake(
0,
view.bounds.size.height-barHeight,
view.bounds.size.width,
barHeight
)
}


3.親のUIViewに3で実装したMOAViewLayoutを適用する

parentView.setViewLayout(layout)


4.MOAViewLayoutを適用した親UIViewのsubviewにレイアウト用のIDを適用し、addSubviewする

let headerView = UIView()

headerView.setViewLayoutID("header")
parentView.addSubview(headerView)

let footerView = UIView()
footerView.setViewLayoutID("footer")
parentView.addSubview(footerView)


実行

以下のように subview に対してレイアウトIDを適用しただけでヘッダー/フッターのレイアウト領域が反映されていることが分かります。

回転にも対応


課題


  • view.setViewLayout(layout)としていますが、本当は view.viewLayout = layout としたいです


おわりに

モジュールとしての要望・意見・突っ込みありましたら、何でも受け付けますのでお待ちしてます。