2013-10-16 65 views
7

我一直在試圖創建一個容器視圖控制器,它提供了一些覆蓋的視圖,如UINavigationController和UITabBarController在iOS 7中對視圖控制器所做的操作。爲了正確地包含視圖佈局,我嘗試了幾乎所有我能想到的方面在容器和包含的視圖控制器中實現-bottomLayoutGuide,但沒有運氣。該方法被調用,但該值似乎並未被使用。應該可以在UIViewController的子類中實現topLayoutGuide和bottomLayoutGuide嗎?

我已經在https://github.com/stefanfisk/custom-layout-guides上列舉了一個快速示例,但在那裏我甚至無法獲得所謂的訪問器。

+0

我已經編輯一個鏈接到一個簡單的項目,說明不了什麼如何發生的問題。 –

回答

2

我發現當你在代碼中設置約束時,例如

[self.view addConstraints:[NSLayoutConstraint 
          constraintsWithVisualFormat:@"V:[topLayoutGuide][mainView]" 
          options:0 
          metrics:nil 
          views:@{@"topLayoutGuide" : self.topLayoutGuide, @"mainView" : self.mainView}]]; 

崩潰有:

2013-10-16 22:23:27.119 Custom Layout Guides[46840:a0b] -[LayoutGuide superview]: unrecognized selector sent to instance 0x8c80c80 
2013-10-16 22:23:27.124 Custom Layout Guides[46840:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[LayoutGuide superview]: unrecognized selector sent to instance 0x8c80c80' 

這很奇怪的是自動佈局嘗試調用superview在佈局指南,因爲它應該只符合UILayoutSupport協議。

我也注意到,topLayoutGuide & bottomLayoutGuide被聲明爲readonly

@property(nonatomic, readonly, retain) id<UILayoutSupport> topLayoutGuide 
@property(nonatomic, readonly, retain) id<UILayoutSupport> bottomLayoutGuide 
+0

我看起來好像不應該被子類重寫,但是對於我來說,文檔讀​​取就好像返回的實際對象將被佈局引擎使用,這意味着重寫它應該可以工作。雖然框架實現返回的對象是這個類的,這顯然是一個視圖:https://github.com/JaviSoto/iOS7-Runtime-Headers/blob/master/Frameworks/UIKit.framework/_UILayoutGuide.h –

+0

@ StefanFisk:在我看來,在這種情況下,文檔與實現不匹配。也許你可以找到一些解決方法,不需要覆蓋佈局指南? –

+1

只需注意:在內部,佈局指南是UIViews,符合添加到視圖層次結構中的UILayoutSupport。也許它可以工作,如果將它們添加到視圖後返回自定義UIView子類? – Accatyyc

相關問題