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”