2014-01-30 85 views
16

說定製topLayoutGuide長度例如,我已類似於UINavigationController定製容器視圖控制器,但它具有在頂部2個導航欄。在容器視圖控制器

然後,在子視圖控制器我使用自動版式,我當然要內容,以此開始第二導航欄下面。

要自動實現這一目標,我需要到頂部佈局引導設置爲兩種導航欄相結合的高度。

我認爲我們可以重寫topLayoutGuide屬性,但無論我做什麼,topLayoutGuide函數都不會在我的自定義容器視圖控制器或子視圖控制器中調用。

因此,這意味着topLayoutGuide基本上是一個不值錢的財產,與蘋果自己的容器視圖控制器唯一的工作?

請告訴我,我錯了!

回答

6

通過閱讀文檔,topLayoutGuide屬性是(readonly),它的長度屬性也是(readonly)。除此之外,它指出:

容器視圖控制器內的視圖控制器不設置這個 屬性的值。取而代之的是,容器視圖控制器約束 的值,以指示:

  • 導航欄的底部,如果導航欄是可見
  • 狀態欄的底部,如果只有一個狀態欄可見
  • 視圖控制器的視圖的頂部邊緣,如果沒有一個狀態欄,也沒有導航欄是可見

這三個場景中暗示,我認爲它可能不是定製的,雖然我很想被證明是錯誤的。看起來就像這個功能的一個很好的用例。

+2

是的,奇怪的是,它是有道理的,雖然覆蓋子類中的只讀屬性。一些可怕的事情發生在運行時間,因爲重寫的方法甚至不會被調用...... – Accatyyc

+0

UIKit類很少調用它們自己的訪問器 –

+1

這裏的底層問題是topLayoutGuide中存在相當大的魔力。它不能通過實施UILayoutSupport來複制。這些都是UIView的...這就是他們如何使用AutoLayout。在iOS9中,指南上有新的方法,在自定義子類中複製將非常困難。 –

相關問題