web-dev-qa-db-fra.com

Comment changer la taille de UIView?

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?

50
SKYnine

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)
47
User4

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)
38

Swift 3 et Swift 4:

myView.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
23
Mohammad Razipour

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)
19
YannickSteph

Pour une sorte de barre de progression, dans Swift 4 

Je suis ces étapes:

  1. Je crée un point de vente UIView: @IBOutlet var progressBar: UIView!
  2. Puis une propriété pour augmenter sa largeur après une action de l'utilisateur var progressBarWidth: Int = your value
  3. Puis pour l'augmentation/la diminution de la progression progressBar.frame.size.width = CGFloat(progressBarWidth)
  4. Et enfin, dans la méthode IBACtion, j'ajoute progressBarWidth += your value pour augmenter automatiquement la largeur chaque fois que l'utilisateur appuie sur un bouton. 
1
Cihan Necmi Gunal

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 à ...".

1
Denys Triasunov

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
0
andy

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)
0
Hairsh Kuramsetty