單擊UINavigationBar(左側)中的「返回」按鈕時,我想知道該視圖會發生什麼,它會返回到?iOS中的UINavigationBar中的「後退」按鈕對視圖有什麼作用?
它是「重新加載」還是「重新初始化」?
我在問這個,因爲我注意到當點擊「返回」按鈕時,視圖幀被切斷(我無法一直滾動到底部)。
但是當我通過TabBar轉到另一個視圖並返回到該視圖時,它不會。
我也使用故事板和問題只發生在3.5英寸的設備。
單擊UINavigationBar(左側)中的「返回」按鈕時,我想知道該視圖會發生什麼,它會返回到?iOS中的UINavigationBar中的「後退」按鈕對視圖有什麼作用?
它是「重新加載」還是「重新初始化」?
我在問這個,因爲我注意到當點擊「返回」按鈕時,視圖幀被切斷(我無法一直滾動到底部)。
但是當我通過TabBar轉到另一個視圖並返回到該視圖時,它不會。
我也使用故事板和問題只發生在3.5英寸的設備。
如果您使用的是bog標準視圖控制器,那麼觸摸Back僅會將頂部視圖控制器彈出導航堆棧。前一個視圖控制器仍駐留在內存中。這使應用程序可以快速響應。
如果你完成這個過程在參考WWDC 2013視頻Custom Transitions Using View Controllers它引導你高水平。很明顯,他們是在討論如何在iOS 7中自定義這些轉換的一部分,但它提供了一些有趣的背景。
簡而言之,在彈出過程中,上一個視圖控制器的視圖將不會重新加載(例如,您將看不到viewDidLoad
調用),因爲它在首次顯示時已經加載。 (iOS 6.0之前的版本中,由於內存壓力,它可能已經被卸載,但我們可能不需要在這裏進入)。該觀點也不是「重新初始化」。視圖從視圖層次結構中簡單地從視圖層次結構中移除,但它由視圖控制器保留,所以當您回彈時,視圖只會重新添加到視圖層次結構中。
因此,在彈出窗口時,它將前一個視圖控制器的視圖添加到視圖層次結構中(viewWillAppear
和各種與視圖相關的佈局相關方法;我們彈出視圖的viewWillDisappear
),執行所需的動畫,然後通過從視圖層次結構中刪除彈出的視圖(我們彈出的視圖爲viewDidDisappear
,彈出的視圖爲viewDidAppear
),然後從視圖控制器層次結構中刪除彈出的視圖控制器,從而完成轉換。
不用擔心理論上可能會調用哪些方法,最好通過在相關方法中添加斷點或NSLog
語句來驗證此效果,並且您會看到在何時調用哪個方法。如果您遇到問題,請編輯您的問題,以包含您實施的所有視圖外觀/佈局相關方法的代碼,我們可以看一下。我也建議你在模擬器中運行你的應用程序,做你需要做的事情來使屏幕處於不希望的狀態,點擊「暫停」按鈕()在調試器,然後在
(lldb)
提示符下,鍵入
po [[UIWindow keyWindow] recursiveDescription]
,將提供當前視圖層次及其框架內的所有意見的列表。如果您使用自動佈局,你也可以輸入在(lldb)
提示如下:
po [[UIWindow keyWindow] _autolayoutTrace]
這將告訴你這一切都在發生的自動佈局約束(以及是否有任何與他們的問題) 。
你必須做一些這方面的診斷工作,然後向我們展示了一些屏幕快照,告訴我們您是否使用自動佈局或不,分享相關的示例代碼(尤其是如果你添加任何的意見以編程方式或以編程方式更改任何框架或約束),如果使用自動佈局,請描述您設置的約束條件,如果您未使用自動佈局,請描述已實施的自動縮放遮罩(例如彈簧和支柱)等
對我來說,這聽起來有點像汽車佈局曖昧的約束,但我們不會知道,直到你在一個小挖,然後分享您的發現和我們在一起。
你真正的問題是什麼?你想要完成什麼或做什麼?出於純粹好奇心的問題不適合StackOverflow。 – Lance
查看原文更新。 – Julia
截圖?碼?我們需要更多細節。 – NathanAldenSr