2016-05-14 3 views
1

これは私を狂ってしまう。最初の実行時にのみ、viewDidLayoutSubviewsが2回呼び出されます。なぜ最初の実行時にviewDidLayoutSubviewsが2度だけ呼び出されるのですか?

class CICViewController: UIViewController { 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 



    func addQLabel(qLabel: UILabel, questionString: String, bgrLabel: UILabel) {// some code goes here 
    } 

    func makeRoundQButtons(qButtons:[UIButton]) { 
     // some code goes here 

    } 

    func addArrows(numberOfArrows:Int, buttonCurAngle:Double) {//some code goes here 
    } 

    func animateButtons(qButtons:[UIButton], buttonCurAngle:Double) { 

    // some code goes here 

    } 



    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

    } 

    func backTapped(sender: UIBarButtonItem) { 
     navigationController?.popViewControllerAnimated(false) 
     //some code goes here 

    } 

    func restartTapped(sender: UIBarButtonItem) { 
     navigationController?.popToRootViewControllerAnimated(false) 
     //some code goes here 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

} 

そして、私のViewControllerに私はこれを呼び出すを:ここで

は、私が使用しているコードです

class OneViewController: CICViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

//some code goes here 
} 


    override func viewDidLayoutSubviews() { 

     super.viewDidLayoutSubviews() 
     print("viewDidLayoutSubviews") 
     self.makeRoundQButtons(qButtons) 
     self.animateButtons(qButtons, buttonCurAngle: 2.0) 

    } 

    override func viewDidAppear(animated: Bool) { 
    //nothing goes here 
    } 


} 

答えて

2

viewDidLayoutSubviewsが呼び出される回数については保証はありません。

あなたは、このスタックオーバーフローのポストに大きな議論を見つけることができます: When is layoutSubviews called?

1


は私が便利this articleを見つけました。それは言っていることから要約:

  • initlayoutSubviewsが呼び出されることはありません(当たり前)
  • addSubviewが追加されているビューに呼び出されるlayoutSubviewsを引き起こし、ビューはそれが(ターゲット・ビューに追加されています)、およびターゲットビューのすべてのサブビューは、
  • setFrameインテリジェントフレームがフレームのサイズパラメータがスクロール
  • 異なる場合にのみセットの有するビューにlayoutSubviewsを呼び出しUIScrollViewlayoutSubviewsscrollViewに呼ばれるようになり、それが唯一の
  • removeFromSuperview親ビュー(応答viewControllers一次ビュー)にlayoutSubviewを呼び出し、デバイス回転
  • スーパーだ - layoutSubviewsのみ(表に表示されていないスーパーで呼び出されると)
関連する問題