【swift】addSubviewしたviewがずれたときの対処メモ
はじめに
結論からいうと回避策はわかったので対処はしたのですが、原因がわかっていません、、、
現象としては、viewDidLoadでaddSubviewしたviewが縦にずれる(画面からはみでる)
しかし、pushViewControllerで別ページへ遷移後に戻ってくるとずれることなく表示される
というものでした
対処方法
で、具体的には以下のような形で実装していたのですがAPI取得処理完了後にaddSubviewを行ったのが原因(?)かどうかはわからないのですが。
どうもAPI取得処理完了後にaddSubviewを行ったのが原因ぽいのです、、、
ViewController.swift(不具合ありバージョン)
class ViewController: UIViewController {
var data: [AnyObject]!
override func viewDidLoad() {
// データ初期化
data = [AnyObject]()
// API処理終了後にsetViewメソッドを呼んで画面描画
getByApi(setView)
}
// 画面描画
func setView() {
self.view.addSubviewメソッドを順番によんでいく
・・・
}
// 1. APIからデータを取得して変数に保持
// 2. .取得後のコールバックを実行
func getByApi(callBackClosure:() -> Void) -> Void {
Alamofire.manager
.request(.GET, "http://example.com/get")
.responseJSON { request, response, JSON, error in
var res: Dictionary<String,AnyObject>?
if let r = JSON as? Dictionary<String,AnyObject> { res = r }
self.data = res
callBackClosure()
}
}
}ViewController.swift(修正バージョン)
class ViewController: UIViewController {
var data: [AnyObject]!
override func viewDidLoad() {
// データ初期化
data = [AnyObject]()
// 画面にviewを追加
setView()
// API処理終了後にビューの更新など
getByApi { () -> Void in
// tableView.reloadData()などで画面の再描画を行う
}
}まぁ、もともとの処理はきっと悪いのだとはおもいますが、、、なぜずれるのかは未だに原因はわかっていません
以上です