2016-06-02 12 views
1

Ich setze die .Width und .Top NSLayoutConstraints auf eine UIImgeView-Instanz innerhalb meines View Controllers updateViewConstraints(). Im XCode Visual Debugger kann ich sehen, dass die Constraints tatsächlich gesetzt sind, aber aus irgendeinem Grund werden sie nicht verwendet (?) Sie erscheinen un (Content-Größe) und sind ausgegraut. Wenn ich die Beschränkungen mit NSLog ausgabe, kann ich auch sehen, dass sie gesetzt sind, aber irgendwie behält das Bild die ursprüngliche Größe bei ... Was bedeutet das?Breite und Höhe NSLayoutConstraints auf UIImageView funktioniert nicht

constraints in parent: [<NSLayoutConstraint:0x7b379590 UIImageView:0x7af897b0.centerX == UIView:0x7b37d2e0.centerX>, 
         <NSLayoutConstraint:0x7b36e3d0 V:|-(0)-[UIImageView:0x7af897b0] (Names: '|':UIView:0x7b37d2e0)>] 
constraints in view: [<NSContentSizeLayoutConstraint:0x7ae892b0 H:[UIImageView:0x7af897b0(301)] Hug:251 CompressionResistance:750>, 
         <NSContentSizeLayoutConstraint:0x7ae834e0 V:[UIImageView:0x7af897b0(365)] Hug:251 CompressionResistance:750>] 

enter image description here

Code, der die Einschränkungen setzt:

/// Image view with the character + ellipse 
@IBOutlet weak var charImageView: UIImageView! 

override func updateViewConstraints() { 
     super.updateViewConstraints() 
     charImageView.widthLayoutConstraint?.constant = 301.0 
     charImageView.heightLayoutConstraint?.constant = 365.0 
} 

Die Erweiterung i widthLayoutConstraint zu bekommen verwenden, um und heightLayoutConstraint

extension UIView{ 
    /** 
    Gets the width layout constraint defined as the NSLayoutConstraint whose first item is self and first attribute is Height 
    */ 
    var heightLayoutConstraint:NSLayoutConstraint? { 
     get{ 
      for constraint in constraints { 
       if constraint.firstItem as? UIView == self && 
        constraint.firstAttribute == NSLayoutAttribute.Height 
       { 
        return constraint 
       } 
      } 
      return nil 
     } 
    } 

    /** 
    Gets the width layout constraint defined as the NSLayoutConstraint whose first item is self and first attribute is Width 
    */ 
    var widthLayoutConstraint:NSLayoutConstraint? { 
     get{ 
      for constraint in constraints { 
       if constraint.firstItem as? UIView == self && 
        constraint.firstAttribute == NSLayoutAttribute.Width 
       { 
        return constraint 
       } 
      } 
      return nil 
     } 
    } 
} 

Dies ist, wie die Layoutbeschränkungen zunächst hinzugefügt mit IB. Wie Sie sehen können, werden sie für die Klasse der kompakten Breite hinzugefügt, die ich benutze, wenn ich das Problem sehe (iPhone4S Simulator).

Die Einschränkungen sind bereits über IB hinzugefügt und ich aktualisiere ihre Konstante mit Code. Der Debugger zeigt deutlich, dass die Konstante IS IN FACT AKTUALISIERT ist, aber irgendwie wird das Bild in Originalgröße gezeichnet.

enter image description here enter image description here

Antwort

3

graue Farbe Einschränkungen zeigen, dass diese Einschränkungen existieren, sondern in Ihren Ansichten nicht installiert.

Siehe Bild unten:

enter image description here

  1. grau Einschränkung Wählen
  2. öffnen Attribut Inspektor
  3. Im Grunde Sie Installed Option
  4. sehen, ob es deaktivieren wird dann diese aktivieren, indem Sie auf Häkchen
  5. Dies wird s installieren gewählt Einschränkung Ihrer Ansicht

Update:

Sie können width Einschränkung mit folgenden Code hinzu:

self.addConstraint(NSLayoutConstraint(
     item: charImageView, 
     attribute: .Width, 
     relatedBy: .Equal, 
     toItem: nil, 
     attribute: .NotAnAttribute, 
     multiplier: 1.0, 
     constant: 301.0)) 

Sie können Bedingungswert mit meiner anderen Antwort aktualisieren:

Update constraint's constant value programatically

+0

Ich bin Einstellungen dieser c Onlineseiten PROGRAMMATISCH in updateViewConstraints() –

+0

@JuanCarlosOspinaGonzalez Können Sie bitte Ihren Code zeigen? – Kampai

+0

bitte sehen. Vielen Dank. –

Verwandte Themen