2016-05-14 2 views
1

Это сводит меня с ума от этого. Только при первом запуске viewDidLayoutSubviews вызывается дважды.Почему viewDidLayoutSubviews вызывается дважды только при первом запуске?

Вот код, я использую:

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 полезным. Резюме от того, что он говорит:

  • init не вызывает layoutSubviews называться (Дух)
  • addSubview причины layoutSubviews называться по мнению добавляемого вид он добавляется к (целевой точки зрения), и все подвиды целевой точки зрения
  • setFrame разумно называют layoutSubviews на представлении, имеющим это кадр, только если параметр размера кадра отличается
  • прокрутки а UIScrollView причин layoutSubviews называться на scrollView, и это SuperView
  • вращения устройства вызывает только layoutSubview на родительском представлении (реагирующий viewControllers основного вида)
  • removeFromSuperview - layoutSubviews вызываются надтаблицы только (не показывать в таблице)
Смежные вопросы