2015-01-21 5 views
6

Ho un problema in cui desidero modificare NSLayoutconstrastra su un UIView ma sembra che molte proprietà siano in sola lettura. Inizialmente ho quattro UIViews come quadrati in una sorta di quadrupla e sono tutti legati l'uno all'altro con un gap di circa 20 pixel.AutoLayout Modifica vincoli

Ho un pulsante che aumenta il frame di uno di quei quadrati a schermo intero che comprende tutti gli altri. È a questo punto che vorrei modificare i vincoli di tale UIView per collegarlo ai bordi di supervisione a 20 pixel, in questo modo quando lo ruoto non torna alla visualizzazione quad ma mantiene lo schermo intero. Sembra che la proprietà che vorrei cambiare sia "seconditem", ma non funzionerà. Mi sto avvicinando a questo problema nel modo sbagliato? Trovo Autolayout un po 'difficile quindi ogni aiuto sarebbe molto apprezzato

risposta

9

Hi si può fare 2 serie di vincoli:

  • 1 per gestire il tuo visualizzazione quad con priorità alta
  • 1 per gestire il tuo schermo intero con priorità Bassa

Nel metodo chiamato quando si tocca il pulsante, impostare la priorità alta sui vincoli a schermo intero e priorità bassa sui vincoli della vista quad.

+0

Sembra logico, tuttavia ho ricevuto questo errore di runtime: la modifica di una priorità da richiesta a non su un vincolo installato (o viceversa) non è supportata. Hai passato la priorità 250 e la priorità esistente era 1000 – Md1079

+6

Sì, i vincoli che vuoi cambiare priorità non devono essere "richiesti" (priorità = 1000). Come ti ho detto, impostali su "alto" (priorità = 750) e passa a "basso" (priorità = 250) e viceversa. – Vincent

+0

Grazie, ci siamo provati, ma abbiamo finito per incasinare altre viste (probabilmente a causa di vincoli mal progettati)! Ho finito per salvare e rimuovere tutti i vincoli quando il pulsante è stato premuto e creando un mucchio di nuovi in ​​modo programmatico per ottenere l'effetto desiderato. Dopo aver finito, ho potuto invertire la procedura. – Md1079