【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()などで画面の再描画を行う } }
まぁ、もともとの処理はきっと悪いのだとはおもいますが、、、なぜずれるのかは未だに原因はわかっていません
以上です