![](/img/trans.png)
[英]self.view.frame/bounds of UIViewController changed between viewDidLoad and viewWillAppear iOS8
[英]frame size changes between viewdidload and viewwillappear in iOS7 and not iOS8
我有一個從xib加載的視圖控制器。 我沒有用代碼中的大小做任何事情-所有這些都在XIB文件中設置。 我有記錄集顯示iniwithnibname具有正確的寬度和高度,viewdidload具有正確的寬度/高度,viewwillappear具有錯誤的寬度/高度。
寬度/高度正在更改為我的代碼中不存在的值。
這是僅適用於iPad橫向的應用程序,在7.1上的模擬器中運行它表明它已損壞,而8.2則表明它可以。
誰能對此有所啟發?
這是我使用xib加載VC的方式:
ShareViewController *shareViewController = [[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil imageName:imageSelected ];
shareViewController.modalPresentationStyle = UIModalPresentationFormSheet;
float fW = shareViewController.view.frame.size.width;
float fH = shareViewController.view.frame.size.height;
shareViewController.preferredContentSize = CGSizeMake(fW, fH);
[self presentViewController:shareViewController animated:YES completion:^(){}];
在iOS8模擬器中,這是NSLog輸出:
KIStd[28103:762368] Entering ShareButtonPressed
KIStd[28103:762368] initWithNibName/image entry
KIStd[28103:762368] viewDidLoad entry
KIStd[28103:762368] viewDidLoad exit w:596.000000, h:400.000000
KIStd[28103:762368] initWithNibName/image exit w:596.000000, h:400.000000
KIStd[28103:762368] viewWillAppear Entry w:596.000000, h:400.000000
KIStd[28103:762368] viewWillAppear exit w:596.000000, h:400.000000
KIStd[28103:762368] viewDidAppear entry
KIStd[28103:762368] viewDidAppear exit w:596.000000, h:400.000000
在iOS7模擬器中,這是NSLog輸出:
KIStd[28186:60b] Entering ShareButtonPressed
KIStd[28186:60b] initWithNibName/image entry
KIStd[28186:60b] viewDidLoad entry
KIStd[28186:60b] viewDidLoad exit w:596.000000, h:400.000000
KIStd[28186:60b] initWithNibName/image exit w:596.000000, h:400.000000
KIStd[28186:60b] viewWillAppear Entry w:540.000000, h:620.000000
KIStd[28186:60b] viewWillAppear exit w:540.000000, h:620.000000
KIStd[28186:60b] viewDidAppear entry
KIStd[28186:60b] viewDidAppear exit w:540.000000, h:620.000000
這很清楚地顯示了問題。
永遠不要依賴viewDidLoad
/ viewWillAppear
幀和邊界值。 通常,最適合收聽大小變化的位置是viewDidLayout
,您可以在其中跟蹤最后一次看到的大小,並在大小發生變化時執行邏輯。
viewDidAppear
是精確的,但是在視圖已啟用動畫后調用,因此您將看到一個丑陋的跳轉。 正如我之前提到的, viewWillLayout
/ viewDidLayout
通常是最精確的一種。
尺寸類可能有問題嗎? 嘗試配置(請參閱關於設計多個尺寸類別 )或禁用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.