2 回答

TA貢獻1868條經驗 獲得超4個贊
不能保證在viewDidLoad中該框架與最終顯示該視圖時的框架相同。UIKit會在顯示視圖上下文之前,先調整視圖控制器視圖的框架。大小是根據界面方向和任何可見的導航欄,標簽欄,工具欄或狀態(tài)欄(其本身的高度可以更改,例如在通話中)的大小確定的。
它有助于了解加載和顯示視圖控制器的視圖時發(fā)生的情況:
某些東西
view
首次訪問了視圖控制器的屬性。這可能發(fā)生在您自己的代碼中,也可能發(fā)生在UIKit中,以響應諸如選擇選項卡之類的用戶操作。UIKit通過調用(
loadView
如果已定義)或通過從中指定的NIB加載視圖來延遲加載視圖控制器的視圖initWithNibName:bundle:
。如果兩者都不存在,則UIKit只會加載一個空視圖。viewDidLoad
一旦視圖及其子視圖已完全加載,UIKit就會調用。 此時,視圖的框架將是在NIB或中設置的框架loadView
。需要UIKit來顯示視圖控制器的視圖。同樣,這可能是用戶操作,例如點擊選項卡,或者是代碼中的顯式方法調用,例如
pushViewController:animated:
或presentModalViewController:animated:
。如上所述,UIKit根據將在其中呈現的上下文調整視圖的大小。
UIKit調用
viewWillAppear:
。 現在,框架應為將要顯示的尺寸。 (?)編輯:這可能不再正確。請參閱下面的評論。UIKit顯示視圖,帶有或不帶有動畫。
UIKit調用
viewDidAppear:
。
如您所見,如果您需要在呈現視圖之前知道視圖框架的大小,則這viewWillAppear:
是您唯一的機會。請記住,由于各種原因(包括旋轉事件或狀態(tài)欄高度的更改),視圖出現后此大小可能會更改。因此,為每個子視圖提供適當的autoresizingMask非常重要,以確保布局可以針對邊界的任何更改進行適當調整。
如果希望手動構建視圖層次結構,建議在loadView中進行構建。由于您可以使用此方法自行構造視圖,因此可以將其框架初始化為所需的任何形式。您選擇的大小無關緊要,因為UIKit可能會在您身上進行更改。只要確保您正確設置了autoresizingMask。

TA貢獻1825條經驗 獲得超4個贊
你班上會有一個方法
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations return YES; }
用這種方法放置框架...這樣就可以正常工作。
例如:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
if(interfaceOrientation == UIDeviceOrientationPortrait || UIDeviceOrientationPortraitUpsideDown)
self.view.frame = CGRectMake(0, 0, FRAME.WIDTHinPOTRAIT, FRAME.HEIGHTinPOTRAIT);
else if(interfaceOrientation == UIDeviceOrientationLandscapeRight || UIDeviceOrientationLandscapeLeft)
self.view.frame = CGRectMake(0, 0, FRAME.WIDTHinLANDSCAPE, FRAME.HEIGHTinLANDSCAPE);
return YES;
}
FRAME.WIDTH>所需寬度FRAME.HEIGHT>所需高度
- 2 回答
- 0 關注
- 425 瀏覽
添加回答
舉報