2014-11-03 12 views
36

Ho problemi con la modifica della mia altezza UIView al momento del lancio.Come cambio la dimensione di UIView?

Devo UIView e voglio uno schermo dimensione * 70 e l'altro per colmare il divario.

qui è quello che ho

@IBOutlet weak var questionFrame: UIView! 
@IBOutlet weak var answerFrame: UIView! 
let screenSize:CGRect = UIScreen.mainScreen().bounds 

e

questionFrame.frame.size.height = screenSize.height * 0.70 
answerFrame.frame.size.height = screenSize.height * 0.30 

Non ha alcun effetto sul app in fase di esecuzione. Io uso l'autolayout ma ho solo i vincoli sui margini ...

Sto sbagliando tutto?

+2

questionFrame.frame = CGRectMake (0, 0, self.view.frame.width, self.view.frame.height * 0.7) answerFrame.frame = (0, self.view.frame.height * 0.7, self .view.frame.width, self.view.frame.height * 0.3) Qualcosa del genere è ciò che cerchi? – User4

risposta

38

Ecco qui. questo dovrebbe funzionare

questionFrame.frame = CGRectMake(0 , 0, self.view.frame.width, self.view.frame.height * 0.7) 

answerFrame.frame = CGRectMake(0 , self.view.frame.height * 0.7, self.view.frame.width, self.view.frame.height * 0.3) 
+1

Ho appena provato su xcode 7.3. Affinché questo CGRectMake() abbia effetto, l'UIView (la mia vista è in realtà una sottoclasse da UIView) deve avere View-> Mode impostato su "Redraw" o "Scale to Fit" e CGRectMake() deve essere in il mio metodo drawRect() della sottoclasse. In caso contrario, le definizioni delle dimensioni nello storyboard avranno effetto. – rockhammer

+0

è 'xy width height' allo stesso tempo, è meglio usare' userView.frame.size.height = 10 userView.frame.size.width = 10' – user25

18

Salve creare questo estende se si desidera. Aggiornamento 2015 Swift 2,0

Crea file Extends.Swift e aggiungere questo codice (ADD importazione di fondazione in cui si desidera modificare l'altezza)

/** 
Get Set x Position 

- parameter x: CGFloat 
by DaRk-_-D0G 
*/ 
var x:CGFloat { 
    get { 
     return self.frame.origin.x 
    } 
    set { 
     self.frame.origin.x = newValue 
    } 
} 
/** 
Get Set y Position 

- parameter y: CGFloat 
by DaRk-_-D0G 
*/ 
var y:CGFloat { 
    get { 
     return self.frame.origin.y 
    } 
    set { 
     self.frame.origin.y = newValue 
    } 
} 
/** 
Get Set Height 

- parameter height: CGFloat 
by DaRk-_-D0G 
*/ 
var height:CGFloat { 
    get { 
     return self.frame.size.height 
    } 
    set { 
     self.frame.size.height = newValue 
    } 
} 
/** 
Get Set Width 

- parameter width: CGFloat 
by DaRk-_-D0G 
*/ 
var width:CGFloat { 
    get { 
     return self.frame.size.width 
    } 
    set { 
     self.frame.size.width = newValue 
    } 
} 

per l'uso (eredita Of UIView)

inheritsOfUIView.height = 100 
button.height = 100 
print(view.height) 
+0

Non è possibile impostare la larghezza e così via senza L'inizializzazione è solo una proprietà get! – BilalReffas

15

Swift 3 e Swift 4:

myView.frame = CGRect(x: 0, y: 0, width: 0, height: 0) 
20

Ciò può essere ottenuto in vari metodi in Swift 3.0 Ha lavorato alle Ultima versione Agosto - 2017

Direttamente assegnare i valori Larghezza Altezza & per una visione:

userView.frame.size.height = 0 

userView.frame.size.width = 10 

Assegnare il CGRect per il telaio

userView.frame = CGRect(x:0, y: 0, width:0, height:0) 

Dettagli metodo:

CGRect (x: punto X, Y: punto di Y, larghezza: Larghezza di vista, altezza: Altezza View)

Utilizzando un metodo di estensione per CGRect

Add seguente codice di estensione in qualsiasi file veloce,

extension CGRect { 

    init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) { 

     self.init(x:x, y:y, width:w, height:h) 
    } 
} 

Utilizzare il seguente codice in qualsiasi punto dell'applicazione per la vista per impostare la dimensione dei parametri

userView.frame = CGRect(1, 1, 20, 45) 
0

È possibile farlo in Interface Builder:

1) Controllo e trascinare da una vista telaio (per esempio questionFrame) alla vista principale, nel pop-up selezionare "Altezze uguali".

2) Quindi andare al controllo dimensione del frame, fare clic su modifica vincolo "Altezza uguale a Superview", impostare il moltiplicatore su 0,7 e premere Invio.

Vedrete che il vincolo è cambiato da "Altezza uguale a ..." a "Altezza proporzionale a ...".

Problemi correlati