2014-09-24 12 views
9

Ecco il mio storyboardiOS 8 Oggi questione widget di allineamento

enter image description here

sto usando autolayout, e che non utilizzano le classi dimensionali.

Quando ho eseguito su iPhone 5s, funziona benissimo. (Verticale e orizzontale) enter image description here

Ma quando mi sono imbattuto su iPhone 6 Plus (ritratto), non è allineare correttamente. enter image description here

su iPhone 6 plus (orizzontale), è peggio. enter image description here

So che posso usare -widgetMarginInsetsForProposedMarginInsets: per impostare il margine, ma in quel caso mi avrà bisogno di personalizzare il margine per ogni dispositivo. Sarebbe orribile :(

è così c'è un modo per allineare la visualizzazione secondaria per il titolo meno dolorosamente

+0

Si sta utilizzando il layout automatico? Se è così, basta impostare un vincolo con il margine del contenitore. –

+0

Ma qual è il margine, differisce su diversi dispositivi/orientamento – Keoros

+0

Penso che il sistema imposta il margine corretto per ogni dispositivo –

risposta

5

Sembra che sia necessario impostarlo manualmente. È possibile farlo creando un vincolo, quindi specificando un IBOutlet e impostando la costante in base al dispositivo/orientamento.

Per riferimento, qui ci sono i margini che ho trovato avevi bisogno:

  • 5S - 1 (2px)
  • 6-1 (2px)
  • 6 più portrait - 5 (15 px)
  • 6 Plus paesaggio - 34 (102px)

potete trovare quale avete bisogno dalla dimensione della vista di estensione, che è 414 pt per un iPhone ritratto 6.

+0

, che dire di iPad landscape e portrait? – Erich

9

L'impostazione dei margini su zero dovrebbe risolvere il problema:

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets 
{ 
    return UIEdgeInsetsZero; 
} 
+0

Su iOS 9 rimuove completamente gli inserti e sembra ancora peggio. –

+0

Grazie ~ Aiuta molto. Funziona bene su iOS 9.1 –

0

Correzioni per alcuni dispositivi. Richiede Ericas UIDevice-Extension.

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets 
{ 
    defaultMarginInsets.bottom = 0; 

    if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) { 
     defaultMarginInsets.left += 5; 
    } else if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { 
     defaultMarginInsets.left += 34; 
    } else { 
     defaultMarginInsets.left += 1; 
    } 

    return defaultMarginInsets; 
} 
Problemi correlati