2014-08-31 2 views
15

voglio accendere layout/off auto per un singolo controller della vista in storyboard (chiamato scena credo)Come attivare il layout/off auto per un singolo controller di vista in storyboard

Quando vado a una specifica scena nello storyboard e cambia la casella di controllo Use Auto Layout nell'ispettore, ottengo il layout automatico on/off per le scene dell'intero storyboard.

Non riesco a capire questo comportamento, perché per una tale casella di controllo sembra una proprietà di una scena specifica e non dell'intero storyboard, e in secondo luogo non vedo perché un layout di scena ha qualcosa a che fare con le altre scene .

È possibile? È possibile nello storyboard o forse solo nel codice?

+0

Vorrei suggerire di restare con l'autolayout. Trarrai vantaggio se le voci sull'iPhone 6 da 4,7 pollici sono vere.Apprendi completamente l'autolayout prima che i problemi di layout dimostrino un forte mal di testa per te. –

risposta

24

Potrebbe sembrare che la casella di controllo "Usa layout automatico" sia per una scena specifica, ma come hai scoperto, è per l'intero "Documento di Interface Builder" (vale a dire, l'intero storyboard). Quindi, se non si desidera utilizzare il layout automatico su una particolare scena, si sono bloccati con alcune alternative:

  1. è possibile mettere questa altra scena in uno storyboard diverso o NIB e la transizione da e per guarda il programmatore a livello di programmazione. Se lo fai, perdi molti dei vantaggi dello storyboard (ad esempio non puoi creare i segui avanti e indietro in IB, ma piuttosto passare da e verso questa scena in modo programmatico).

  2. Si potrebbe mantenere il layout automatico abilitato ma poi per il controller un punto di vista in questione, è possibile a livello di codice:

    • Rimuovere tutti i vincoli che IB possa aver aggiunto (esp in Xcode 6);

    • Regolare autoresizingMask per i vari comandi. Se vuoi che il tuo autoresizingMask sia onorato, potresti voler attivare translatesAutoresizingMaskIntoConstraints; e

    • Se si utilizza Xcode 6, è possibile disattivare "Usa classi di dimensione", in modo da disporre la scena correttamente per il dispositivo di destinazione.

    Così, dopo aver steso la mia etichetta come volevo in IB, potrei allora:

    - (void)viewDidLoad { 
        [super viewDidLoad]; 
    
        [self.view removeConstraints:self.view.constraints]; 
        [self.label removeConstraints:self.label.constraints]; 
        self.label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; 
        self.label.translatesAutoresizingMaskIntoConstraints = YES; 
    } 
    

    Chiaramente, ciò che si imposta il autoresizingMask a è del tutto da voi (in questo esempio, Ho messo un'etichetta centrata sulla scena, quindi quanto sopra lo mantiene centrato mentre vado al paesaggio), ma spero che questo illustri l'idea.

Francamente, dato che non c'è niente che puoi fare con le maschere ridimensionamento automatico che non si può facilmente esprimere nel layout automatico, sarei propenso ad attaccare con il layout automatico, e si elimina il disagio degli approcci di cui sopra .

+0

ben spiegato, grazie – Mario

0

È possibile spostare il layout del controller di visualizzazione singola su un file xib separato e caricarlo a livello di programmazione. E se semplicemente non vuoi definire i tuoi limiti, puoi lasciare il controller nello storyboard e semplicemente non aggiungere vincoli ad esso. In tal caso, i vincoli verranno generati automaticamente al momento dell'esecuzione, in base ai frame delle viste secondarie del VC.