2015-04-28 12 views
9

In base al file di intestazione UIView.h, i seguenti metodi devono essere dichiarati obsoleti.Alternativa ai metodi di visualizzazione automatica di UIView da deprecare

Qual è il modo alternativo di utilizzare l'autolayout nel codice?

Non vedo come i metodi consigliati nel commento del codice sostituiscano le controparti esistenti poiché funzionano sul vincolo effettivo e non sulla relazione tra UIView e il vincolo.

@interface UIView (UIConstraintBasedLayoutInstallingConstraints) 

- (NSArray *)constraints NS_AVAILABLE_IOS(6_0); 

- (void)addConstraint:(NSLayoutConstraint *)constraint NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead, set NSLayoutConstraint's active property to YES. 
- (void)addConstraints:(NSArray *)constraints NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead use +[NSLayoutConstraint activateConstraints:]. 
- (void)removeConstraint:(NSLayoutConstraint *)constraint NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead set NSLayoutConstraint's active property to NO. 
- (void)removeConstraints:(NSArray *)constraints NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead use +[NSLayoutConstraint deactivateConstraints:]. 
@end 

risposta

8

I vincoli stessi contengono la relazione (cioè, essi indicano la vista o viste coinvolte nella relazione), in modo che il vecchio modo di aggiungere i vincoli a una visione era ridondante e, a volte confusa, perché si doveva scegli la giusta vista nella gerarchia per aggiungerli a.

In modo nuovo, basta creare i vincoli e impostare la loro proprietà active-YES (per Objective-C) o per true (per Swift) e il sistema aggiunge alla corretta visione per voi. Se hai più di un vincolo da aggiungere, chiami il metodo di classe activateConstraints: e imposta la proprietà per te.

Con il vecchio metodo, era compito del programmatore aggiungere i vincoli alla vista corretta. Se tu avessi un vincolo alla coinvolta vista A e vista B, poi ci sono 3 possibilità di dove aggiungere il vincolo:

  1. Se la vista A è una visualizzazione secondaria di vista B (o una visualizzazione secondaria di una visualizzazione secondaria), poi il vincolo deve essere aggiunto alla vista B.
  2. Se la vista B è una sottoview della vista A (o una sottoview di una sottoview), quindi il vincolo deve essere aggiunto alla vista A.
  3. Se la vista A e la vista B sono entrambi i sottoview di un'altra vista (chiamarla C), quindi il vincolo deve essere aggiunto per visualizzare C.

Con il nuovo metodo, è sufficiente impostare la proprietà active del vincolo su YES/true e il sistema lo rileva. È molto più facile

+0

Cosa intendi con "lo aggiunge alla vista corretta per te"? Significato basato sulle proprietà 'first/secondItem'? –

+0

La "vista corretta" dipende da dove si trovano le due viste nella gerarchia della vista. Se la vista B è una sottoview della vista A, aggiunge i vincoli per visualizzare A. Se la vista A e B sono entrambi subviews di un'altra vista, aggiunge il vincolo alla superview delle viste A e B. – vacawama

+0

Interessante - per riferimento, qui è una breve descrizione: http://ericasadun.com/2014/07/11/beta-auto-layout-constraint-activation/ –