2016-05-14 110 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 
    } 


} 

回答

1

我發現this article有用。從它說什麼摘要:

  • init不會導致layoutSubviews被稱爲添加(杜)
  • addSubview原因layoutSubviews要對視圖調用,查看它被添加到(目標視圖),以及目標視圖的所有子視圖
  • setFrame智能地對視圖具有它的幀僅設置爲在幀的尺寸參數是不同
  • 滾動調用layoutSubviews一個UIScrollView原因layoutSubviews被稱爲在scrollView,它的上海華
  • 旋轉設備只調用父視圖layoutSubview(響應viewControllers主視圖)
  • removeFromSuperview - layoutSubviews上調用上海華止(未顯示在表)
相關問題