[英]Swift: What is the meaning of viewDidLayoutSubviews?
我在viewDidLayoutSubviews
下有代碼,目的是使圖像在一開始就透明(alpha = 0),然后在viewDidAppear
下逐漸淡入(變成alpha = 1)。 另外,我還有一個按鈕,當按下它時會更改其自己的標簽文本。
但是,當按下按鈕並且標簽改變時,圖像(我在viewDidLayoutSubviews
下指定的圖像)也消失了。 我認為是因為viewDidLayoutSubviews
下的代碼已被調用?
我的問題是:
1) viewDidLayoutSubviews
是什么意思? 為什么在按鈕標簽更改時調用它? 簡而言之/一般來說, setNeedsLayout
和setNeedsDisplayInRect
什么?
2)然后使用viewWillAppear更好嗎?
這是兩個類似的問題,但我對它們的理解不充分:
顧名思義,當viewController
的視圖剛剛完成布局時,將調用viewDidLayoutSubviews
,並且您可以假定此時的視圖根據自動autolayout
約束位於正確的位置/ frame
。 在調用該方法之前,假設您的view
具有其最后一frame
,則不應執行任何操作:例如,如果嘗試在viewDidLoad
aView setFrame:
則它可能會失敗/無效,因為自動autolayout
會在布局過程中更改其frame
淘汰階段。 因此,如果您確實需要更改其框架,則應在viewDidLayoutSubviews
中/之后調用setFrame:
簡而言之,如果您關心的是image
或imageView
alpha值,則viewDidLayoutSubviews
可能不是正確的位置。 viewDidAppear
似乎更適合於此。 viewDidAppear
非常簡單:當視圖出現在屏幕上時,將調用它。
您是否嘗試過閱讀文檔? viewDidLayoutSubviews , setNeedsLayout等?
按鈕標簽更改->寬度更改->重新排列-> viewDidLayoutSubviews
。 您不應將viewDidLayoutSubviews
視為單個調用事件。 您應該使用UIView.animateWithDuration
在viewDidAppear
啟動圖像透明度動畫,這是一個很好的開始位置,因為所有內容UIView.animateWithDuration
正確對齊。 在IB或init方法中,將圖像alpha設置為0,然后對其進行動畫處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.