web-dev-qa-db-fra.com

Comment définir la hauteur des conteneurs en vue pile?

J'aimerais vous demander s'il est possible de définir la hauteur en pourcentage de chaque conteneur placé dans une vue de pile verticale. Je veux avoir 3 conteneurs en vue pile. La première devrait prendre 40% de la taille de l'écran, la deuxième 20% et la troisième 40%. Je vous remercie

 enter image description here

7
Lachtan

Le type de distribution "Remplir proportionnellement" fonctionne avec la taille de contenu intrinsèque .

Par conséquent, si notre vue de pile verticale (hauteur 600) comporte 2 vues, ViewA (hauteur du contenu intrinsèque 200) et ViewB (hauteur du contenu intrinsèque 100), la vue de la pile les redimensionne en ViewA (hauteur 400) et ViewB (hauteur 200).

Également, 

  1. Si toutes les vues n'ont pas de hauteur de contenu intrinsèque, la vue de pile verticale affichera toujours une erreur IB "contrainte de besoins pour: position Y ou hauteur". 
  2. Les vues sans hauteur intrinsèque s'effondreront à une hauteur nulle. 
  3. Les vues ayant une hauteur intrinsèque se répartiront proportionnellement.

Ce que tu veux vraiment  

est la distribution de type 'remplissage' avec deux contraintes.

  1. ViewA.height = 2 * ViewB.height
  2. ViewB.height = 0.5 * ViewC.height

C'est tout. J'espère que ça aide.

 enter image description here

11
BangOperator

Vous pouvez également l'implémenter par programme, en éliminant un champ de texte, puis en le retournant avec une distribution de remplissage identique de la vue de pile, comme suit:

class LoginViewController: UIViewController{

@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
nameTextField.translatesAutoresizingMaskIntoConstraints = false
emailTextField.translatesAutoresizingMaskIntoConstraints = false
passwordTextField.translatesAutoresizingMaskIntoConstraints = false
}

// IBAction 
@IBAction func registerLoginSegmented(_ sender: Any) {

    if (sender as AnyObject).selectedSegmentIndex == 0{
        // Before we resize (shrink) the nameTextField, change the stackview' distribution from "fill equally" to just "fill"
        stackView.distribution = .fill

        // Change the nameTextField's text
        heightConstraintNameTextField = nameTextField.heightAnchor.constraint(equalToConstant: 0)
        heightConstraintNameTextField?.isActive = true

        // Rearrange the height of the emailTextField
        heightConstraintEmailTextField = emailTextField.heightAnchor.constraint(equalToConstant: 50)
        heightConstraintEmailTextField?.isActive = true

        // Rearrange the height of the passwordTextField
        heightConstraintPasswordTextField = passwordTextField.heightAnchor.constraint(equalToConstant: 50)
        heightConstraintPasswordTextField?.isActive = true

    }
    else {
          // Return the nameTextField by simply trun off the constrants and assign "fillEqually" instead of "fill"
        heightConstraintNameTextField?.isActive = false
        heightConstraintEmailTextField?.isActive = false
        heightConstraintPasswordTextField?.isActive = false
        stackView.distribution = .fillEqually

    }

}
0
Ahmadiah