一.首先說一下viewWillLayoutSubviews這個方法 app
//從新佈局視圖控制器,剛進視圖控制器是會走倆次(在didload和viewwillappera以後)橫豎屏一變更,就走這個方法,而didLoad和viewWillAppear只在開始走。viewWillAppear從其餘界面退回來時會走。 佈局
二.各方法在下面幾種狀況下是否調用
//豎屏剛進來:viewDidLoad 1次 viewWillAppear 1次 viewWillLayoutSubviews 2次 viewDidAppear 1次 spa
//跳轉出去: viewWillLayoutSubviews 1次 io
//從別的界面跳轉回來: viewWillAppear 1次 viewWillLayoutSubviews 1次 viewDidAppear 1次 後臺
// viewWillLayoutSubviews 1次 方法
// 進去後臺 : di
// 從後臺回來: view
// 橫屏變豎屏:viewWillLayoutSubviews 1次 vi
// 豎屏變橫屏:viewWillLayoutSubviews 1次 co
// 橫屏剛進來:默認豎屏,若是一進來就是橫屏的話會走三次viewWillLayoutSubviews,前倆次與豎屏剛進來同樣,第3次至關於走豎屏變橫屏
// 從別的界面跳回來:和豎屏從別的界面回來同樣
三.
從上面能夠看出若是在屏幕旋轉後要得到[UIScreen mainScreen].bounds.size.width計算的寬度值,需在viewWillLayoutSubviews方法中得到,只有這個方法在橫豎屏旋轉時會走(橫豎屏時計算出來寬高是不同的,在橫屏的寬度是在豎屏時的高度值,在橫屏的高度值是在豎屏的寬度值)。
CGFloat applicationFrameHeight = [[UIScreen mainScreen] applicationFrame].size.height;
CGFloat applicationFrameWidth = [[UIScreen mainScreen] applicationFrame].size.width;
這個在橫豎屏時計算出來的也有須要注意的:在豎屏下高會減去狀態欄的高度20,但在橫屏時不會減去狀態欄高度,也就是在橫屏下計算出來的 applicationFrame和bounds的值相同。