簡體   English   中英

在iOS7(而非iOS8)中出現viewdidload和view之間的幀大小變化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM