2015-06-26 7 views
12

Mi sto divertendo molto a capire come rendere proporzionale il margine di due oggetti. Se scelgo le proporzioni su Xcode, mi dà l'opzione per regolare l'altezza del mio oggetto proporzionale all'altezza dello schermo. e questo non è il mio caso. Voglio che il margine tra un pulsante e il fondo dello schermo sia proporzionale all'altezza dello schermo. E voglio che sia fatto usando Xcode "No Code". What I am seeking to doAutoLayout Xcode, Margine proporzionale con altezza

Il vostro supporto è molto apprezzato.

Grazie

+0

check http://stackoverflow.com/a/30589956/3633534 – Sujay

+0

Creare il margine utilizzando una vista trasparente tra il pulsante Fine e il fondo. Pin la vista ai lati, pulsante Fine e il fondo. Ora assegnagli un vincolo di proporzioni in base all'altezza desiderata per iPhone 4. Anche se non è perfetto, verrà ridimensionato con larghezza che generalmente si ridimensiona nella stessa proporzione dell'altezza. Quindi se hai fatto l'apsect così alto 100 su iPhone 4, sarebbe 100 su iPhone 5, 117 su iPhone 6 e 129 in iphone6 ​​+ e 240 su iPad. Quindi diverso da iPhone 5, questo ti dà quello che vuoi. –

+0

@RoryMcKinnel Esiste un modo "diretto" più semplice per farlo? Sento che è una soluzione alternativa –

risposta

7

utilizzare la proprietà moltiplicatore di NSLayoutConstraint!

Innanzitutto, imposta il vincolo di altezza uguale dalla tua vista alla sua superview con il moltiplicatore che desideri. Puoi usare Ctrl + trascina dalla tua vista alla superview.

Quindi imposta un altro vincolo a 0 dalla cima della visualizzazione alla superview e un vincolo di larghezza uguale con un moltiplicatore a 1 dalla visualizzazione alla superview.

Fatto!

+0

Quindi vuoi dire che l'unico modo per farlo è concentrarsi sulle altezze invece che sui margini? –

2

So che non volevi codice, ma penso che sarebbe meglio usare un vincolo di altezza. Aggiungere un vincolo per l'altezza per il margine e CTRL trascinarlo nel file di intestazione per ottenere qualcosa di simile:

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *myMarginHeightConstraint; 

Hai bisogno di una proprietà che contiene la frazione di altezza dello schermo per il margine:

@property CGFloat myHeightFraction; 

Quindi aggiungere questo in viewDidLoad.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.myHeightFraction = 0.1; // e.g to get margin at 10% of height 
    myMarginHeightConstraint.constant = myHeightFraction * [[UIScreen mainScreen] bounds].size.height; 

    ... 
} 
+0

Non penso che sia corretto, in quanto questo non aggiornerà il margine se la dimensione della vista cambia? Per esempio. passando dall'orientamento verticale all'orientamento orizzontale. – Paludis

+0

@Paludis Questo codice mostra solo l'idea e non copre la rotazione. Quando si dispone della rotazione e sono stati creati vincoli con dimensioni fisse in base all'orientamento, è necessario aggiungere le sostituzioni del metodo di rotazione necessarie e regolare i vincoli in base alle esigenze. Layout si occupa quindi del resto del ciclo di layout successivo. Puoi anche implementare la modifica in 'viewWillLayoutSubviews' che copre anche la rotazione. –

2

Aggiungere una vista trasparente e renderla proporzionale all'altezza. Unisci il pulsante Fine con questa vista trasparente. There puoi trovare come realizzarlo.

Problemi correlati