Da quando XCode le prevede, le UIStoryboard sono diventate una componente quasi imprescindibile per lo sviluppo di qualsiasi app grazie alla semplicità con cui consentono di realizzare l'interfaccia grafica e il posizionamento accurato degli oggetti. Può però capitare di avere la necessità di dover rimuovere da codice i vincoli impostati tramite la Storyboard, ad esempio per cambiare la posizione di un oggetto in conseguenza di un evento attivato dall'interazione dell'utente.
Per far questo ho messo a punto il seguente metodo statico:
| 
					 1 2 3  | 
						+ (void)RemoveContraintsFromView:(UIView*)view      removeParentConstraints:(bool)parent      removeChildConstraints:(bool)child;  | 
					
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  | 
						+ (void)RemoveContraintsFromView:(UIView *)view      removeParentConstraints:(bool)parent      removeChildConstraints:(bool)child {     if (parent) {         // Remove constraints between view and its parent.         UIView *superview = view.superview;         [view removeFromSuperview];         [superview addSubview:view];     }     if (child) {         // Remove constraints between view and its children.         [view removeConstraints:[view constraints]];     } }  | 
					
Potete inserirlo in una qualsiasi classe helper già presente nel vostro progetto oppure crearne una apposita (la mia si chiama LayoutHelper) e richiamarlo nel seguente modo:
| 
					 1 2 3  | 
						[self.myView RemoveContraintsFromView      removeParentConstraints:true      removeChildConstraints:true];  | 
					
Come potete vedere il metodo può essere configurato per eliminare i vincoli presenti tra la nostra view e quella che la contiene e/o quelle che sono in essa contenute. Inutile dire che tanto l'oggetto self.myView quanto i suoi parent / children possono appartenere a una qualsiasi classe derivata da UIView (UIButton, UIImage, UILabel, etc.).
Ricordate che, una volta rimossi i vincoli definiti a livello di Storyboard, potete impostarne di nuovi direttamente da codice utilizzando il metodo descritto in quest'altro articolo.
Felice sviluppo!

                        
                        
                        
One Comment on “Objective C: rimuovere da codice i vincoli impostati tramite Storyboard”