restricciones parental olvide eliminar control como codigo bloquear aplicaciones activar ios iphone constraints

ios - parental - olvide mi codigo de restricciones iphone 5



Cómo crear restricciones de diseño mediante programación (5)

Estoy mostrando una vista en la parte inferior de la aplicación universal y agrego esta vista dinámicamente en mi vista. Quiero mostrar esta vista en la parte inferior cada vez como iAd. En ambas orientaciones. ¿Cómo puedo agregar restricciones para esto? Por favor recomiende.

Gracias


Extendiendo la solución @Alex Shubin en Swift 4, hago lo siguiente:

A veces, necesito agregar un número variable de restricciones, en este caso 3, porque la altura se calculará más adelante.

keyboard.addConstaints(top: nil, right: 0.0, bottom: 0.0, left: 0.0, width: nil, height: nil)

Debe tener cuidado al agregar todo lo necesario y asegurarse de no tener restricciones conflictivas.

extension UIView { func addConstaints(top: CGFloat?, right: CGFloat?, bottom: CGFloat?, left: CGFloat?, width: CGFloat?, height: CGFloat?) { translatesAutoresizingMaskIntoConstraints = false if top != nil { self.addConstaint(top: top!) } if right != nil { self.addConstaint(right: right!) } // Add lines for bottom, left, width an heigh // ... } func addConstaint(top offset: CGFloat) { guard superview != nil else { return } topAnchor.constraint(equalTo: superview!.topAnchor, constant: offset).isActive = true } }

Para verificar que todas las vistas se presentaron correctamente, puede inspeccionar la propiedad .constraints de la supervista o puede verificar el marco en:

override func viewDidLayoutSubviews() { print(keyboard.frame) }


Para fijar una vista en la parte inferior de la pantalla, necesita las siguientes restricciones para configurar.

  1. Restricción principal con respecto a la vista principal para - X
  2. Restricción final con respecto a la Vista principal para - Ancho
  3. Restricción inferior con respecto a la Vista principal para - Y
  4. Restricción de altura unida a sí mismo para - Altura .

Vamos a agregar.

UIView *subView=bottomView; UIView *parent=self.view; subView.translatesAutoresizingMaskIntoConstraints = NO; //Trailing NSLayoutConstraint *trailing =[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:parent attribute:NSLayoutAttributeTrailing multiplier:1.0f constant:0.f]; //Leading NSLayoutConstraint *leading = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:parent attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.f]; //Bottom NSLayoutConstraint *bottom =[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:parent attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.f]; //Height to be fixed for SubView same as AdHeight NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:ADHeight]; //Add constraints to the Parent [parent addConstraint:trailing]; [parent addConstraint:bottom]; [parent addConstraint:leading]; //Add height constraint to the subview, as subview owns it. [subView addConstraint:height];

Espero que esto ayude.

Aclamaciones.


Pequeña extensión para la respuesta anterior porque addConstraint quedará en desuso en el futuro. Aquí hay una extensión para la vista de la interfaz de usuario. Use estas funciones después de agregar la vista a la jerarquía.

OBJC

@implementation UIView (Constraints) -(void)addConstaintsToSuperviewWithLeftOffset:(CGFloat)leftOffset topOffset:(CGFloat)topOffset { self.translatesAutoresizingMaskIntoConstraints = false; [[NSLayoutConstraint constraintWithItem: self attribute: NSLayoutAttributeLeading relatedBy: NSLayoutRelationEqual toItem: self.superview attribute: NSLayoutAttributeLeading multiplier: 1 constant: leftOffset] setActive:true]; [[NSLayoutConstraint constraintWithItem: self attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self.superview attribute: NSLayoutAttributeTop multiplier: 1 constant: topOffset] setActive:true]; } -(void)addConstaintsWithWidth:(CGFloat)width height:(CGFloat)height { self.translatesAutoresizingMaskIntoConstraints = false; [[NSLayoutConstraint constraintWithItem: self attribute: NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1 constant: width] setActive:true]; [[NSLayoutConstraint constraintWithItem: self attribute: NSLayoutAttributeHeight relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1 constant: height] setActive:true]; } @end

Swift 3

extension UIView { public func addConstaintsToSuperview(leftOffset: CGFloat, topOffset: CGFloat) { self.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint(item: self, attribute: .leading, relatedBy: .equal, toItem: self.superview, attribute: .leading, multiplier: 1, constant: leftOffset).isActive = true NSLayoutConstraint(item: self, attribute: .top, relatedBy: .equal, toItem: self.superview, attribute: .top, multiplier: 1, constant: topOffset).isActive = true } public func addConstaints(height: CGFloat, width: CGFloat) { self.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint(item: self, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: height).isActive = true NSLayoutConstraint(item: self, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: width).isActive = true } }


Puede usar las restricciones de distribución automática mediante programación como a continuación

fileprivate func setupName(){ let height = CGFloat(50) lblName.text = "Hello world" lblName.backgroundColor = .lightGray //Step 1 lblName.translatesAutoresizingMaskIntoConstraints = false //Step 2 self.view.addSubview(lblName) //Step 3 NSLayoutConstraint.activate([ lblName.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor), lblName.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor), lblName.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor,constant: -height), lblName.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor), ]) }

Captura de pantalla de salida


También desde iOS 9 se podría hacer súper simple con anclajes:

Swift 3

extension UIView { func addConstaintsToSuperview(leadingOffset: CGFloat, topOffset: CGFloat) { guard superview != nil else { return } translatesAutoresizingMaskIntoConstraints = false leadingAnchor.constraint(equalTo: superview!.leadingAnchor, constant: leadingOffset).isActive = true topAnchor.constraint(equalTo: superview!.topAnchor, constant: topOffset).isActive = true } func addConstaints(height: CGFloat, width: CGFloat) { heightAnchor.constraint(equalToConstant: height).isActive = true widthAnchor.constraint(equalToConstant: width).isActive = true } }

Categoría OBJC

@implementation UIView (Constraints) -(void)addConstaintsToSuperviewWithLeadingOffset:(CGFloat)leadingOffset topOffset:(CGFloat)topOffset { if (self.superview == nil) { return; } self.translatesAutoresizingMaskIntoConstraints = false; [[self.leadingAnchor constraintEqualToAnchor:self.superview.leadingAnchor constant:leadingOffset] setActive:true]; [[self.topAnchor constraintEqualToAnchor:self.superview.topAnchor constant:topOffset] setActive:true]; } -(void)addConstaintsWithHeight:(CGFloat)height width:(CGFloat)width { [[self.heightAnchor constraintEqualToConstant:height] setActive:true]; [[self.widthAnchor constraintEqualToConstant:width] setActive:true]; } @end