2014-09-20 86 views
0

我目前正在開發一個自定義容器控制器。問題是:我如何正確設置我的後代孩子的滾動視圖的內容插入? 讓我們來舉個例子吧。我正在做一個自定義容器控制器(CCC),底部有一個半透明的視圖(如TabBar),我的容器控制器的子控制器是一個導航控制器(NC),它具有一個表視圖控制器(TVC)作爲兒童。因此,層次結構很簡單:iOS 7自定義容器控制器 - 如何設置子控制器的視圖插圖?

[CCC] 
    ↑ 
[NC] 
    ↑ 
[TVC] 

現在的UINavigationController和的UITabBarController已經做到這一點:他們設置了TVC contentInset,使他們的NavBar(或的TabBar)下滾動。但是我怎樣才能達到相同的行爲? 我希望我的TVC(或其他)能夠100%不知道其層次結構,所以我不能讓TVC「手動」設置其內容插入。

我實現的第一個解決方案是在CCC中實現 - (void)viewWillLayoutSubviews並導航層次結構,查找葉控制器檢查其視圖是否爲ScrollView。它工作正常,直到我在NC內部推出另一個TableViewController(TVC2)。這樣做viewWillLayoutSubviews沒有被調用,CCC無法知道其子TVC2。

UINavigationController和UITabBarController內部採用什麼策略?或者我怎樣才能使它工作?

回答

0

我認爲改變你自己的視圖控制器的頂部和底部佈局指南應該讓它按照你的期望工作。問題是,設置佈局指南。作爲一個「祕密」,佈局指南實際上在內部實現爲UIView高度爲0的對象。因此從技術上講,您可以更改這些視圖的來源以滿足您的需求。記得在每個佈局過程中正確設置它們。

+0

我試圖添加到我的自定義容器的方法' - (id )bottomLayoutGuide'返回實現'UILayoutSupport'的自定義'UIView'子類。長度方法返回'90.0f',但沒有任何變化。我也注意到,半透明的酒吧有一個零bottomLayoutGuide。所以我認爲這不是正確的做法。 – davidefender 2014-09-20 10:00:44

+0

不要返回不同的視圖。相反,請獲取系統佈局指南視圖並修改其框架。 – 2014-09-20 10:24:23

+0

不工作,表視圖仍然隱藏在自定義「tabbar」下: 'UIView * bottomLayoutGuide =(UIView *)self.bottomLayoutGuide; CGRect frame = bottomLayoutGuide.frame; frame.size.height = 100; bottomLayoutGuide.frame = frame;' – davidefender 2014-09-21 17:16:00

相關問題