2012-10-22 11 views
6

Quindi, non riesco a comprendere i vincoli nel generatore di interfacce.Utilizzo dei vincoli nel generatore di interfacce

Non riesco ad aggiungerli da solo - il builder di interfaccia sembra pensare che sia il migliore.

Anche io non posso portarli via (posso convertire in un vincolo "utente", quindi eliminare, ma il generatore di interfacce lo sostituirà con lo stesso vincolo di nuovo).

Ho pensato che i vincoli avrebbero dovuto aiutarvi con il cambiamento di layout e di tutti i tipi, ad esempio viste dell'edificio per iPhone 5 e precedenti. Inoltre, passando dalla modalità verticale alla modalità orizzontale.

Non riesco a farlo funzionare. Se aggiungo una vista e la posiziono sotto la parte superiore della superview, verrà impostato un vincolo Top space to:. Questo sarà un valore in pixel, il che significa che quando guardo su iPhone 4 più corto (o se il telefono cambia paesaggio) questi elementi non si spostano automaticamente.

Ad esempio, sto cercando di creare una visualizzazione personalizzata della tastiera, una simile a quella che si vedrebbe su un registratore di cassa. Ho creato una sottoclasse UIView personalizzata e ora ho inserito un UIView nel generatore di interfacce. Ho impostato l'altezza e la larghezza e l'ho posizionato nella parte inferiore della vista (dove è stato "cliccato" in posizione). Come il generatore di interfacce ha aggiunto un vincolo Top space to mettendolo a quell'altezza (iphone 5). Quindi, se lo guardo su iPhone 4, non si muove (come mi aspetterei, dato che "lo scatto" in posizione nella parte inferiore dello schermo), ma taglia fuori il fondo.

Questo non è quello che volevo, ma (come sopra) non posso eliminare il vincolo purtroppo.

Cosa posso fare? Sono consapevole che potrei semplicemente creare due file di pennini (per iPhone 5 e per altri iPhone) ma che dire quando voglio che le cose si spostino automaticamente quando accendo il panorama del telefono?

Grazie per il vostro aiuto

risposta

7

Non è possibile rimuovere un vincolo in Interface Builder se così facendo avrebbe lasciato vincoli insufficienti per determinare completamente la dimensione e la posizione di qualsiasi widget di interfaccia.

  • Una soluzione: aggiungere più vincoli, fino a che la dimensione e la posizione sono sovradeterminati. Sarai quindi in grado di eliminare uno dei vincoli superflui. Per esempio, hai dato questo esempio:

    ho impostare l'altezza e la larghezza e posizionato nella parte inferiore del vista (dove "cliccato" in luogo). Come il generatore di interfacce ha aggiunto a Top spazio a costrizione mettendolo a quell'altezza (iphone 5). Quindi, se lo visualizzo su iPhone 4 , non si sposterà (come mi aspetterei, dato che ho inserito lo nella parte inferiore dello schermo), ma taglia lo in basso.

    Selezionare la vista e scegliere Editor> Pin> Spazio inferiore a Superview. Ora hai più vincoli del necessario: l'altezza, la larghezza, qualcosa che determina la posizione orizzontale (che hai dimenticato di menzionare) e un perno nella parte superiore della superview e un perno nella parte inferiore della superview. Così puoi ora eliminare il pin in alto.

  • Un'altra soluzione: rimuovere i vincoli indesiderati nel codice. Un vincolo è un oggetto di interfaccia ordinario, quindi puoi creare uno sbocco e rimuoverlo quando il codice viene eseguito. Tuttavia, se lo fai in modo tale da lasciare le dimensioni o la posizione sottodeterminate, otterrai risultati imprevedibili ("layout ambiguo"), quindi fai attenzione.

  • Un'altra soluzione: ridurre la priorità dei vincoli non desiderati in IB. Interface Builder assicurerà che tutti i valori siano determinati in modo assoluto. Ma forse sai, ad esempio, che la superview cambierà dimensione e quindi alcuni dei vincoli creati da Interface Builder saranno indesiderabili. Non è possibile eliminarli, ma è possibile ridurne la priorità. Quindi, nel tuo esempio, potresti finire con un pin in cima e uno spillo in basso, ma potresti solo ridurre la priorità del pin in alto.

0

non ovvio per me è che è possibile attivare questa nuova funzione off su base file per pennino, se è più problemi che vale la pena.

Selezionare il file pennino e selezionare la finestra di ispezione File (Visualizza-> Utilità-> Mostra File Inspector) e deselezionare "Usa Autolayout".

+0

La domanda è ** lavorare CON ** contstraints. Penso che Thomas ** non voglia veramente disabilitarlo. –

+0

Questo mi è stato di grande aiuto, e penso che anche l'autore del biglietto lo troverebbe utile. Puoi capire dal tono di come scrive che non è affatto contento dei vincoli e preferirebbe semplicemente fare a meno di loro piuttosto che cercare di inciderli nella sottomissione. – marfastic

0

Se si riscontrano problemi con questo schermo su diverse dimensioni dello schermo dove si adatta bene su uno schermo di iPhone 5 ma non su uno schermo di iPhone 4 o viceversa una soluzione è disattivare l'opzione "Autoresize Subviews" per le viste offensive e quindi fare clic sul pulsante in basso a destra della finestra che mostra lo storyboard/pennino che modifica le dimensioni dello schermo e assicurarsi che tutto funzioni correttamente per entrambe le dimensioni dello schermo. Solo un'altra di quelle cose che mi rende felice quando costruisco le cose in codice ed evito le stranezze di IB come questa.

Problemi correlati