Xcode 6 Storyboard della dimensione sbagliata?


139

Creato un nuovo progetto da zero in Swift in Xcode 6 (Beta 1) e ho visto uno strano comportamento con Storyboard e l'output che sto visualizzando.

Ho creato un'interfaccia semplice (come mostrato di seguito) - con le proprietà di View Controller incluse. Quando eseguo questo nel simulatore, mi aspetto che 'Hello, World' sia centrale nell'interfaccia utente, tuttavia sembra che questo 'Square' sia semplicemente adattato allo schermo dell'iPhone e quindi viene mostrata la vista sbagliata (vedi sotto ).

La mia domanda è: qualcun altro ha visto questo comportamento e come lo ha risolto?

Grazie!

Vista dall'editor dello storyboard

Ispettore degli attributi

Ispettore dimensioni

Uscita del simulatore


aggiungere vincoli di layout automatico, che dovrebbero risolverlo. stai attualmente progettando per tutti i layout, quindi i layout automatici ti aiuteranno a visualizzare il contenuto nel posto "giusto".
Raz,

8
Suggerimenti: Utilizzando l'editor assistente> automatico> Anteprima, sarai in grado di vedere un'anteprima dello schermo con tutte le dimensioni dello schermo
Francescu,

Risposte:


81

Mentre la risposta di Asif Bilal è una soluzione più semplice che non coinvolge le classi di dimensioni (che sono state introdotte in iOS 8.) ti consigliamo vivamente di abituarti alle classi di dimensioni in quanto sono il futuro, e alla fine salterai comunque ad alcune punto."


Probabilmente non hai aggiunto i vincoli di layout.

Seleziona la tua etichetta, tocca il pulsante dei vincoli di layout in basso:

inserisci qui la descrizione dell'immagine

In quel menu aggiungi larghezza e altezza (NON dovrebbe essere uguale al mio) selezionando la loro casella di controllo e facendo clic su aggiungi vincoli. Quindi tieni premuto il tasto Control e trascina l'etichetta sulla vista principale, quindi, quando fai clic, dovresti avere le opzioni per centrare orizzontalmente e verticalmente nel contenitore. Aggiungi entrambi e dovresti essere configurato.


1
Eccellente - questo ha funzionato alla grande per me - Grazie per il tuo aiuto (accetterà la tua risposta quando il timer viene alzato)
Candyfloss

1
Prego. Questo è il comportamento predefinito con autolayout, che ora è abilitato per impostazione predefinita. Ricorda, a causa di possibili diverse dimensioni / layout dello schermo, dovrebbe esserci un modo per calcolare dove verrà posizionata una vista rispetto al suo genitore e il trasferimento automatico risolve questo problema. quando non si aggiungono questi vincoli, view li crea automaticamente in fase di esecuzione ma rispetto all'angolo in alto a sinistra. Se hai bisogno di qualcos'altro (hai quasi sempre bisogno di qualcos'altro), devi specificare esplicitamente i vincoli.
Can Poyrazoğlu,

4
Nota: il trascinamento del controllo (che può essere scomodo) non è necessario. Il pulsante a sinistra di quello selezionato in questa immagine apre un menu che ti permette di bloccare i centri orizzontali e verticali.
jrturton,

Hai ragione .. Sono solo abituato a trascinare il controllo, ecco perché l'ho detto in quel modo.
Can Poyrazoğlu,

@ CanPoyrazoğlu - Menzioni "Seleziona la tua etichetta". Quale etichetta? Ho lo stesso problema con un nuovo progetto iPhone in cui non ho etichette o altri elementi dell'interfaccia utente. Il mio primo progetto in Xcode 6, usando Objective C.
rattletrap99

253

Procedere come segue per risolvere il problema

In Storyboard, seleziona una vista qualsiasi, quindi vai alla finestra di ispezione File. Deseleziona "Usa classi di dimensioni", ti verrà chiesto di conservare i dati della classe di dimensioni per: iPhone / iPad. E quindi fai clic sul pulsante "Disabilita classi di dimensioni". In questo modo le dimensioni della vista dello storyboard verranno visualizzate con il dispositivo selezionato.


8
Questa è la risposta corretta se stai ricevendo un controller di visualizzazione 600x600 quando, ad esempio, volevi un controller di visualizzazione standard per iPhone.
Fraggle,

5
Questa dovrebbe essere la risposta corretta (almeno per quelli che funzionano solo su piattaforme non universali)
Raptor

36
Non so perché la gente abbia contrassegnato questo come risposta giusta ... il primo è il modo in cui dovrebbe essere fatto ... Se non ti piacciono i vincoli di layout di quelli che stai andando nella direzione opposta ... Apple sta sfruttando un buon modo di sviluppare per tutte le dimensioni di iPhone e iPad e vuoi solo tornare alle vecchie cose? Perché non puoi permetterti di aggiornarti? Mai votato in basso, ma sembra che questa risposta confonda le persone e faccia quindi utilizzare il vecchio approccio (che sarà deprecato) invece di incoraggiare quindi a usare le nuove cose ...
Raphael Ayres,

3
La migliore risposta per tutti coloro che sono abituati agli storyboard per iPhone / iPad
mamarx,

3
Usa i vincoli di layout ... Apple lo sta facendo nello stesso modo in cui funziona Android. La vista non ha forma ... A volte potrebbe essere una seccatura, ma se si forzano le dimensioni, l'app avrà un aspetto negativo su dispositivi di dimensioni diverse. Se vuoi che un pulsante appaia nell'angolo in basso a destra, crea solo 2 vincoli per esso e proibisci ... nessuna selezione X o Y. Tutto sarà impostato dal motore. Usa dimensioni intrinseche. Usa la tua immaginazione. Usa vincoli relazionali. Scopri questo s ***.
Raphael Ayres,

18

Se stai usando Xcode 6 e stai progettando per iOS 8, nessuna di queste soluzioni è corretta. Per ridimensionare correttamente le visualizzazioni solo per il tuo iPhone, non disattivare le classi di dimensioni, non disattivare le metriche dedotte e non impostare vincoli (ancora). Invece, usa il controllo della classe di dimensioni, che è un pulsante di testo facile da perdere nella parte inferiore di Interface Builder che inizialmente legge "wAny hAny".

Fare clic sul pulsante e selezionare Larghezza compatta, Altezza normale. Questo ridimensiona le tue visualizzazioni e copre tutti gli orientamenti per i ritratti di iPhone. I documenti di Apple qui: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/SelectingASizeClass.html o cerca "Selezione di una classe di dimensioni in Interface Builder"


Mi sembra utile leggere tutta la Guida alla progettazione delle classi di dimensioni nel tuo link, ad esempio da Informazioni sulla progettazione di classi di dimensioni multiple alla distribuzione di un'app con classi di dimensioni nelle versioni iOS precedenti .
Franklin Yu,

Questa è un'ottima soluzione se si desidera mantenere il layout automatico ma si desidera che le viste dello storyboard vengano visualizzate come orizzontale o verticale anziché quadrata.
Stephenspann,

5

In Storyboard, seleziona il tuo ViewController e vai su Atribute Inspector. Nella parte superiore, in Metriche simulate hai proprietà Dimensione e Orientamento impostate su Inferito. Modificali sui valori desiderati.

Affinché un'applicazione venga visualizzata correttamente su un'altra dimensione dello schermo, devi anche impostare i vincoli, come descritto da Can Poyrazoğlu nel primo post.


5

Ho riscontrato questo problema in xcode 6 e c'è un modo per risolvere i conflitti di ridimensionamento. Se selezioni la tua vista, in basso vedrai un'icona simile a | -Δ- |. Se fai clic su di esso, il tuo progetto verrà ridimensionato per diversi dispositivi.


Sì e dopo aver selezionato il simbolo del triangolo, fare clic su Aggiungi vincoli mancanti e boom. La visualizzazione verrà ridimensionata in base alle dimensioni del dispositivo se la sua app universale
Vishal Dharankar,

3

Vai a Impostazioni attributi (angolo in alto a destra) Nelle metriche simulate, che ha proprietà Dimensione, Orientamento, Barra di stato, Barra in alto, Barra in basso. Per SIZE, cambia Inferred -> Freeform.


+1 @ Rachel grazie per questo utile piccolo suggerimento sulle metriche simulate -> Dimensione: "Forma libera" (aka, a quanto pare, "abilita una dimensione personalizzata per un xib riutilizzabile supportato da una vista personalizzata").
cweekly

3

Nella pagina dello storyboard, vai su File Inspector e deseleziona 'Usa classi di dimensioni'. Ciò dovrebbe ridurre il controller della vista alle dimensioni normali dell'iPhone che conoscevi. Tieni presente che l'utilizzo di "classi di dimensioni" ti consentirà di progettare il tuo progetto su molti dispositivi. Una volta deselezionata, l'Xcode ti darà una finestra di avviso come segue. Questo dovrebbe essere autoesplicativo.

"La disabilitazione delle classi di dimensioni limiterà questo documento alla memorizzazione di dati per una singola famiglia di dispositivi. I dati per la classe di dimensioni che rappresenta meglio il dispositivo di destinazione verranno conservati e tutti gli altri dati verranno rimossi. Inoltre, i follower verranno convertiti in non equivalenti adattivi ".


3

Per chiunque utilizzi XCode 7, è molto facile progettare per una specifica dimensione del dispositivo (invece della tela quadrata predefinita).

In Interface Builder, seleziona ViewController o Scene dal menu a sinistra. Quindi Show the Attributes Inspector, vai su Simulated Metricse seleziona il desiderato Sizedal menu a discesa.


Ciò ti consentirà solo di progettare nello storyboard per quel dispositivo. Quando esegui la tua app, il suo design può variare notevolmente a seconda delle dimensioni dello schermo.
Joey Tawadrous,

@JoeyTawadrous Esattamente. Ma risponde alla domanda posta :)
Sacerdote

2

Probabilmente dovrai usare "Risolvi problemi di layout automatico" (icona triangolare in basso a destra nella vista storyboard) per aggiungere / ripristinare i vincoli suggeriti (Xcode 6.0.1).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.