tiempo pantalla nuevas notificaciones funciones control codigo centro apple agrupar agrupadas ios autolayout constraints nslayoutconstraint

pantalla - ¿Cómo puedo configurar las restricciones de relación de aspecto programáticamente en iOS?



nuevas funciones ios 12 (5)

He usado el diseño automático para mis controladores de vista. He establecido las posiciones V y H en restricciones, pero quiero saber cómo puedo aumentar el tamaño de mi botón cuando cambia a 5s, 6 y 6 Plus. Esta es la forma en que agregué restricciones para el botón de inicio de sesión:

NSArray *btncon_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnLogin(40)]" options:0 metrics:nil views:viewsDictionary]; [btnLogin addConstraints:btncon_V]; NSArray *btncon_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[btnLogin]-100-|" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_H]; NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-70-[Title]-130-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-10-[btnLogin]" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_V];

Pero mi problema es que a pesar de que maneja la brecha lateral izquierda y derecha, se está estirando en iPhone 6 y 6 Plus ya que la altura es fija. ¿Cómo puedo aumentar el tamaño según el tamaño de la pantalla? Creo que esta podría ser la relación de aspecto, pero ¿cómo puedo establecer la restricción de relación de aspecto en el código?


He intentado todas las respuestas anteriores, pero no funcionó, y esta es mi solución con swift 3:

let newConstraint = NSLayoutConstraint(item: yourView, attribute: .width, relatedBy: .equal, toItem: yourView, attribute: .height, multiplier: 560.0/315.0, constant: 0) yourView.addConstraint(newConstraint) NSLayoutConstraint.activate([newConstraint]) NSLayoutConstraint.deactivate(yourView.constraints) yourView.layoutIfNeeded()


Me gusta esto. Trata una vez.

[self.yourview setTranslatesAutoresizingMaskIntoConstraints:NO]; [self.yourview addConstraint:[NSLayoutConstraint constraintWithItem:self.yourview attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.yourview attribute:NSLayoutAttributeWidth multiplier:(self.yourview.frame.size.height / self.yourview.frame.size.width) constant:0]];

o en lugar de (self.yourview.frame.size.height / self.yourview.frame.size.width) puede usar cualquier valor flotante. Gracias.

Swift 3.0 -

self.yourview!.translatesAutoresizingMaskIntoConstraints = false self.yourview!.addConstraint(NSLayoutConstraint(item: self.yourview!, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: self.yourview!, attribute: NSLayoutAttribute.width, multiplier: self.yourview.frame.size.height / self.yourview.frame.size.width, constant: 0))


Puede configurar "Restricción de altura" en tiempo de diseño en Interface Builder. Simplemente marque ''"Eliminar en tiempo de compilación", y se eliminará cuándo se ejecutará la aplicación.

Después de eso, puede agregar la restricción "Relación de aspecto", por ejemplo, en el método viewDidLoad.

En Xamain.iOS para "16: 9" se ve así:

this.ImageOfTheDay.AddConstraint(NSLayoutConstraint.Create( this.ImageOfTheDay, NSLayoutAttribute.Height, NSLayoutRelation.Equal, this.ImageOfTheDay, NSLayoutAttribute.Width, 9.0f / 16.0f, 0));

O, como dijo Mahesh Agrawal :

[self.ImageOfTheDay addConstraint:[NSLayoutConstraint constraintWithItem:self.ImageOfTheDay attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.ImageOfTheDay attribute:NSLayoutAttributeWidth multiplier:(9.0f / 16.0f) constant:0]];


Swift 3:

yourView.addConstraint(NSLayoutConstraint(item: yourView, attribute: .height, relatedBy: .equal, toItem: yourView, attribute: .width, multiplier: 9.0 / 16.0, constant: 0))


Layout Anchors es la forma más conveniente de establecer restricciones programáticamente.

Digamos que desea establecer una relación de aspecto de 5: 1 para su botón, entonces debería usar:

button.heightAnchor.constraint(equalTo: button.widthAnchor, multiplier: 1.0/5.0).isActive = true

Aquí está el código completo:

class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let button = UIButton(type: .custom) button.setTitle("Login", for: .normal) button.backgroundColor = UIColor.darkGray self.view.addSubview(button) button.translatesAutoresizingMaskIntoConstraints = false let margins = view.layoutMarginsGuide button.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 20.0).isActive = true button.trailingAnchor.constraint(equalTo: margins.trailingAnchor, constant: -20.0).isActive = true button.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: -20.0).isActive = true button.heightAnchor.constraint(equalTo: button.widthAnchor, multiplier: 1.0/5.0).isActive = true } }

Aquí se obtienen resultados con el código escrito anteriormente. Puede ver que el botón mantiene su relación de aspecto de 5: 1 en varios dispositivos: