Le Size Class, il vero potere dell’Auto Layout

L'Auto Layout, come hai visto nella precedente lezione, non risolvere tutti i problemi legati ai cambiamenti di dimensione dei dispositivi. Infatti, l'Auto Layout provvede alla generazione di un'interfaccia che si adatta ai soli cambiamenti di dimensione ma non tiene conto delle proporzioni, dell'orientamento e di tanti altri fattori che vedrai tra poco. Un altro problema, [...]

Torna a: Corso creare applicazioni per iOS con il linguaggio Swift > I Principi dell'Auto Layout
  • Francesco

    Ciao,

    ho seguito a fatto la lezione nella previw si vede tutto
    bene sia in portrait che landscape ma quando provo sul simulatore si
    vede bene in portrait ma quando passo in landscape la image View compre
    tutto òa scermo

    • Ciao Francesco,
      Appena torno da lavoro provo e ti dico se c’è qualche errore nel mio progetto.
      Inviato da iPhone

  • Francesco

    Ciao Peppe,

    ovviamente intendevo nel mio progetto non nel Tuo… :-)

    • Ahh! allora dovrei vedere il progetto. Casomai pubblicalo sul forum con gli screen dei vincoli che hai messo, così vediamo quali non vanno bene

  • Daniele

    Ciao Peppe,
    non mi è molto chiaro come comportarmi nel mio caso ovvero se usare any/any o altro.
    In pratica sto provando ad impostare il layout della mia app con alcuni oggetti nella view; premesso che l’app dovrà essere utilizzata solo device iphone sino al 6s plus devo ancorare gli oggetti usando any/any o altro?
    Un altro dubbio: nell’ipotesi che la view dell’app in portraid debba mostrare tre immagini centrate orizzontalmente ma disposte in modo verticale una sotto all’altra come debbo fare per far si che in modalità landscape le immagini vengano invece disposte orizzontalmente?

    • Ciao Daniele, usa Any Any come base per qualsiasi progetto. Poi, per lavorare simulando le dimensioni degli iPhone 6S plus, seleziona il View Controller, vai nell’attributes inspector e seleziona le Simulated Size dell’iPhone 6S plus (così lavori in Any any ma allo stesso tempo vedi come viene il risultato su iPhone 6S)
      Su Any Any i vincoli di defluiscono in tutte le altre Size. Questo ti permette, ad esempio nella landscape, di togliere solo quelle di posizione delle tue ImageView e di riposizionare gli oggetti, che già hai perché inseriti in Any Any, in un nuovo modo.

      Spero di essere stato chiaro,
      Fammi sapere ;)

      • Daniele

        Brazil per la tua riposta. Mi met to all’opera e ti faccio sapere

        • Yees! Fammi sapere ;)

          Inviato da iPhone

          • Daniele

            Beh, sono impallato… mi è chiaro tutto il discorso in generale dei constraints sia come “ancoraggio” che come dimensionamento….
            Continuo a non capire, però, come differenziare il comportamento tra vari dispositivi.
            Es. ho creato il layout con constraints in any any della View e relativi oggetti. Ho simulato su tutti i dispositivi e in modalità portrait siamo ok. Non mi è assolutamente chiaro come istruire l’app nel comportamento in modalità landscape senza incasinare la modalità portrait…..

            • Definisci i constrait per la modalità portrait per tutti i dispositivi nella Any-Any. Nelle altre che si allungano per la componente Width (ad esempio Regular Width – Compat Height (iPhone 6S Plus in landscape)) puoi definire e rimodellare i vincoli per la modalità landscape.

              Hai visto anche la lezione successiva?

            • Daniele

              ripasso, forse è meglio….

            • In caso non ci riesci, possiamo sentirci per Skype oppure sul forum puoi mettere il tuo progetto e ti faccio un piccolo video illustrativo di come modificarlo.

            • Daniele

              ok. leggendo una seconda volta la lezione è tutto molto più chiaro.
              Due cose :
              1) ora impostato i layout per 3 view. In preview sono perfette sia in protraid che landscape. mi segnala però dei punti gialli…. devo per forza risolverli o posso lasciarli li perché l’app impagina bene? (provato anche su iPhone).
              2) è possibile nascondere la navigation bar solo per la prima pagina?
              Grazie

            • Mmmh meglio se non ci fossero.

              Che tipi d’errore sono? se mi carichi uno screen vediamo come risolverli.

              Mentre per la Navigation Bar puoi eliminarla utilizzando il seguente snippet:
              self.navigationController?.setNavigationBarHidden(true, animated: animated)
              Da inserire dentro il metodo viewDidLoad

            • Daniele

              Grazie Peppe,

              ho inserito lo snippet ma ma di questo errore : use of unresolved identifier ‘animated’

            • Si hai ragione, metti animated: false.
              O se crei una funzione e vuoi togliere la barra dopo che l’app è visualizzata puoi mettere animated: true.

            • Daniele

              ciao Peppe,
              scusa ma se metto (true, animated:true) me la nasconde su tutte le view mentre con (false, animated:false) la a vedere su tutte le view…

            • Daniele

              magari in pv posso avere il tuo indirizzo Skype?
              grazie

            • Ciao Daniele,
              Ovviamente il codice accede all’istanza comune del navigation controller, quindi una volta che lo passi a false lo togli per tutti. Quindi, quello che puoi fare, è toglierlo nel VC che ti interessa e poi riattivarlo negli altri.
              Io comunque non adotto questa soluzione. Se un barra non mi serve o è perché non è un VC che deve stare ai comandi di un NavController oppure ne creo una fatta da me.

            • Daniele

              ok. leggendo una seconda volta la lezione è tutto molto più chiaro.
              Due cose :
              1) ora impostato i layout per 3 view. In preview sono perfette sia in protraid che landscape. mi segnala però dei punti gialli…. devo per forza risolverli o posso lasciarli li perché l’app impagina bene? (provato anche su iPhone).
              2) è possibile nascondere la navigation bar solo per la prima pagina?
              Grazie

  • Michele

    Ciao Peppe,
    ho seguito la lezione fino a prima di parlare dell’iphone 3g.
    Ho un problema se avvio il simulatore e provo a ruotare il dispositivo.
    Lanscape è tutto ok, mentre portrait non vengono visualizzati nel posto giusto gli elementi.
    Eppure non ho warnings sul layout, anche se in fase di simulazione la console dice che ho un errore nel layout, ti incollo uno screen. Sai dirmi dove dovrei mettere mani per fixare?
    Grazie mille,
    Michele

    • Ciao Michele,

      Allora, controlla il vincolo di Center Y (sarebbe il Center Vertically) per una delle TextField. Dice che è impostato ad un’altezza di -358.

      Molto probabilmente hai vincoli doppi. Seleziona tutti gli oggetti e controlla dal Size Inspector o dal Document Outliner.

      Poi controlla che non hai vincoli di Size Class che entrano in conflitto. Ricordati che:
      Un vincolo in Any Any vale su tutte le Size Class mentre non vale il viceversa. Mentre un vincolo di una Size più grande surclassa quelle più piccole.
      Controlla le installazioni dei vincoli, se hai due vincoli di Size Class installati sulla stessa Class genereranno un conflitto.

      Fammi sapere!
      Giuseppe

      • Michele

        Grazie mille Peppe. Risolto.
        Buona serata,

        Michele

        • Ciao Michele,

          Posso sapere da cosa veniva l’errore?

          Inviato da iPhone

          • Michele

            Ciao Peppe, certamente! Mi ero perso il messaggio, scusa se rispondo solo ora.
            C’era un vincolo con coordinate negative come avevi correttamente letto tu dal log del debugger. Devo imparare a leggere con più pazienza gli output del debugger senza spaventarmi per tutte quelle classi che non conosco!

            Comunque ho rimosso il vincolo ed è bastato a far funzionare l’implementazione dell’esercizio.

            Grazie ancora,
            Michele

            • Non ti preoccupare!
              Appena finisco le parti importanti del corso, non mancherà di scrivere qualcosa riguardo al debugging di un’applicazione.

              Alla prossima ;)

  • Vince

    Ciao Peppe,
    io non ho letto la precedente versione della lezione, ma sicuramente questa mi é stata chiara.

    Un appunto sul quiz della lezione:
    credo ci siano domande rivolte alla vecchia versione di xCode.

    Ciao

    • Ciao Vince,
      Prima era leggermente più complesso a causa del pannello delle Size Class davvero confusionario.

      Comunque faccio un check delle domande!

      A presto,
      Giuseppe

Start typing and press Enter to search

auto-layout-in-xcode-la-guida-definitiva