Mi código a continuación declara 3 vistas de imagen. Me gustaría que todos tengan la misma altura y llenen la vista. Debería verse como esta foto a continuación

enter image description here

Necesito obtener de alguna manera las vistas de imágenes para interactuar entre sí, pero no sé cómo. Esto debe hacerse en todo el código. No se utilizó el guión gráfico.

    import UIKit

class ViewController: UIViewController {

var pic = UIImageView()
var pic2 = UIImageView()
var pic3 = UIImageView()


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    [pic,btn].forEach({
        $0.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview($0)
        $0.backgroundColor = .systemRed
    })
    pic3.backgroundColor = .systemOrange
       pic2.backgroundColor = .systemPink


    pic.topAnchor.constraint(equalTo: view.topAnchor, constant: 10).isActive = true
    pic.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -200).isActive = true
    pic.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15).isActive = true
    pic.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15).isActive = true

    pic2.topAnchor.constraint(equalTo: view.topAnchor, constant: 10).isActive = true
    pic2.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -100).isActive = true
    pic2.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15).isActive = true
    pic2.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15).isActive = true

    pic3.topAnchor.constraint(equalTo: view.topAnchor, constant: 10).isActive = true
    pic3.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -100).isActive = true
    pic3.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15).isActive = true
    pic3.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15).isActive = true
}
}
0
max Smtih 4 dic. 2019 a las 03:50

2 respuestas

La mejor respuesta

Use restricciones de auto-distribución: alinee los bordes y luego use el anclaje de altura de la vista (o SafeAreaLayoutGuide) con un multiplicador de un tercio. Para permitir el redondeo, solo asigne el ancla de altura a dos de las tres vistas y use los anclajes superior / inferior para establecer la altura de la vista restante.

   let view1 = UIView()
   view1.translatesAutoresizingMaskIntoConstraints = false
   view1.backgroundColor = .blue
   let view2 = UIView()
   view2.translatesAutoresizingMaskIntoConstraints = false
   view2.backgroundColor = .yellow
   let view3 = UIView()
   view3.translatesAutoresizingMaskIntoConstraints = false
   view3.backgroundColor = .purple
   view.addSubview(view1)
   view.addSubview(view2)
   view.addSubview(view3)

   //set constraints
   NSLayoutConstraint.activate([
      // anchor edges
      view1.leadingAnchor.constraint(equalTo: view.leadingAnchor),
      view1.trailingAnchor.constraint(equalTo: view.trailingAnchor),
      view2.leadingAnchor.constraint(equalTo: view.leadingAnchor),
      view2.trailingAnchor.constraint(equalTo: view.trailingAnchor),
      view3.leadingAnchor.constraint(equalTo: view.leadingAnchor),
      view3.trailingAnchor.constraint(equalTo: view.trailingAnchor),
      // set anchors governing height
      view1.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
      view2.topAnchor.constraint(equalTo: view1.bottomAnchor),
      view2.bottomAnchor.constraint(equalTo: view3.topAnchor),
      view3.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
      view1.heightAnchor.constraint(equalTo: view.layoutMarginsGuide.heightAnchor, multiplier: 1/3),
      view2.heightAnchor.constraint(equalTo: view.layoutMarginsGuide.heightAnchor, multiplier: 1/3)
   ])
0
flanker 4 dic. 2019 a las 01:18

Aquí hay una posible solución usando UIStackView:

(descargo de responsabilidad: escrito en el navegador, no probado en Xcode)

Además, es posible que aún necesite un diseño automático para hacer que stackView cubra la pantalla.

var view1 = UIView()
var view2 = UIView()
var view3 = UIView()

override func viewDidLoad() {
    super.viewDidLoad()

    view1.backgroundColor = .blue
    view1.backgroundColor = .green
    view1.backgroundColor = .red

    let stackView = UIStackView(arrangedSubviews: [view1, view2, view3])  

    stackView.axis = .vertical
    stackView.distribution = .fillEqually

    self.view.addSubview(stackView)

}
0
koen 4 dic. 2019 a las 02:03