J'ai du mal à modifier ma hauteur UIView au lancement.
Je dois UIView et je veux l’un comme taille d’écran * 70 et l’autre pour combler le vide.
voici ce que j'ai
@IBOutlet weak var questionFrame: UIView!
@IBOutlet weak var answerFrame: UIView!
let screenSize:CGRect = UIScreen.mainScreen().bounds
et
questionFrame.frame.size.height = screenSize.height * 0.70
answerFrame.frame.size.height = screenSize.height * 0.30
Cela n'a aucun effet sur l'application pendant l'exécution . J'utilise autolayout mais je n'ai que des contraintes de marges ...
Est-ce que je fais tout faux?
Voici. ça devrait marcher.
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)
Ceci peut être réalisé de différentes manières dans Swift 3.0 Travaillé dans la dernière version janvier-2019
Attribuez directement les valeurs de hauteur et de largeur à une vue:
userView.frame.size.height = 0
userView.frame.size.width = 10
Assigne le CGRect pour le cadre
userView.frame = CGRect(x:0, y: 0, width:0, height:0)
Détails de la méthode:
CGRect (x: point de X, y: point de Y, largeur: largeur de la vue, hauteur: Hauteur de la vue)
Utilisation d'une méthode d'extension pour CGRECT
Ajoutez le code d'extension suivant dans n'importe quel fichier Swift,
extension CGRect {
init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) {
self.init(x:x, y:y, width:w, height:h)
}
}
Utilisez le code suivant n'importe où dans votre application pour que la vue définisse les paramètres de taille.
userView.frame = CGRect(1, 1, 20, 45)
Swift 3 et Swift 4:
myView.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
Salut créer cela s'étend si vous voulez. Mise à jour 2015 Swift 2.0
Create File Extends.Swift et add ce code (add import foundation où vous souhaitez modifier la hauteur)
/**
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
}
}
For Use (hérite de UIView)
inheritsOfUIView.height = 100
button.height = 100
print(view.height)
Pour une sorte de barre de progression, dans Swift 4
Je suis ces étapes:
@IBOutlet var progressBar: UIView!
var progressBarWidth: Int = your value
progressBar.frame.size.width = CGFloat(progressBarWidth)
progressBarWidth += your value
pour augmenter automatiquement la largeur chaque fois que l'utilisateur appuie sur un bouton. Vous pouvez le faire dans Interface Builder:
1) Faites glisser la souris d’une vue à l’autre (par exemple, questionFrame) vers la vue principale. Dans la fenêtre contextuelle, sélectionnez "Des hauteurs égales".
2) Accédez ensuite à l’inspecteur de taille du cadre, cliquez sur la contrainte de modification «Hauteur égale à supérieure», définissez le multiplicateur sur 0,7, puis appuyez sur Entrée.
Vous verrez que la contrainte est passée de "Hauteur égale à ..." à "Hauteur proportionnelle à ...".
Je sais qu'il y a déjà une solution à cette question, mais j'ai trouvé une alternative à cette question et peut-être que cela pourrait aider quelqu'un.
J'avais du mal à définir le cadre de ma sous-vue car certaines valeurs faisaient référence à sa position dans la vue principale. Donc, si vous ne souhaitez pas mettre à jour votre cadre en modifiant tout le cadre via CGRect, vous pouvez simplement changer une valeur du cadre puis le mettre à jour.
// keep reference to you frames
var questionView = questionFrame.frame
var answerView = answerFrame.frame
// update the values of the copy
questionView.size.height = CGFloat(screenSize.height * 0.70)
answerView.size.height = CGFloat(screenSize.height * 0.30)
// set the frames to the new frames
questionFrame.frame = questionView
answerFrame.frame = answerView
L'affectation de questionFrame.frame.size.height= screenSize.height * 0.30
ne reflétera rien dans la vue. parce que c'est une propriété get-only. Si vous voulez changer le cadre de questionFrame, vous pouvez utiliser le code ci-dessous.
questionFrame.frame = CGRect(x: 0, y: 0, width: 0, height: screenSize.height * 0.70)