2013-10-16 7 views
7

Ho cercato di creare un controller di vista contenitore che offre alcuni punti di vista sovrapposti come UINavigationController e UITabBarController fanno per controller di vista in iOS 7. Per rendere i punti di vista contenuti Schema correttamente Ho provato quasi tutto ciò che mi viene in mente per quanto riguarda implementare -bottomLayoutGuide sia nel contenitore che nei controller della vista contenuta, ma senza fortuna. Il metodo è chiamato, ma il valore non sembra essere usato.Dovrebbe essere possibile implementare topLayoutGuide e bottomLayoutGuide nelle sottoclassi di UIViewController?

Ho creato un esempio rapido a https://github.com/stefanfisk/custom-layout-guides, ma non sono riuscito a richiamare gli accessors.

+0

Ho modificato la questione con un link ad un progetto semplice che mostra come non succede nulla. –

risposta

2

Ho scoperto che quando imposti i vincoli nel codice, ad es.

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

si blocca con:

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' 

E 'strano che Layout Automatico tenta di chiamare superview su una guida di layout, come dovrebbe essere conforme solo al protocollo UILayoutSupport.

Ho anche notato che topLayoutGuide & bottomLayoutGuide sono dichiarate come readonly:

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

I, sembra che non debbano essere sovrascritti dalle sottoclassi, ma per me la documentazione si legge come se gli oggetti effettivi restituiti venissero usati dal motore di layout, il che implica che l'override dovrebbe funzionare. L'oggetto restituito dalle implementazioni quadro è di questa classe, però, che è chiaramente una visione: https://github.com/JaviSoto/iOS7-Runtime-Headers/blob/master/Frameworks/UIKit.framework/_UILayoutGuide.h –

+0

@ StefanFisk: mi sembra che in questo caso la documentazione non corrisponda all'implementazione. Forse puoi trovare qualche soluzione alternativa che non richieda la sovrascrittura delle guide di layout? –

+1

Solo una nota: Internamente, le guide di layout sono Uvisiews conformi a UILayoutSupport aggiunto alla gerarchia di viste. Forse potrebbe funzionare se si restituiscono sottoclassi UIView personalizzate dopo averle aggiunte alla vista? – Accatyyc

Problemi correlati