2017-01-10 2 views
0

Also in meiner TableViewCell habe ich eine ImageView, die 0 Punkte Beschränkung auf die nachfolgende und führende Superview hat. Obere Constraints von 8 und Bottom Constraint von 30 für die Superview. Und dann füge ich Aspekt Einschränkung des Imageview nach dem Bild mit diesem Code:Mein Constraint-Break-Log macht keinen Sinn, kann mir jemand helfen, das zu verstehen?

override var image: UIImage? { 
     didSet { 
      if let image = image { 
       let aspect = image.size.width/image.size.height 
       aspectConstraint = NSLayoutConstraint(item: self, 
                 attribute: NSLayoutAttribute.width, 
                 relatedBy: NSLayoutRelation.equal, 
                 toItem: self, 
                 attribute: NSLayoutAttribute.height, 
                 multiplier: aspect, 
                 constant: 0.0) 
      } 
     } 
    } 

    internal var aspectConstraint : NSLayoutConstraint? { 
     didSet { 
      if oldValue != nil { 
       self.removeConstraint(oldValue!) 
      } 
      if aspectConstraint != nil { 
       self.addConstraint(aspectConstraint!) 
      } 
     } 
    } 

wie ist mein Code irgendwelche Einschränkungen zu brechen? sie haben nichts mit einander

2017-01-10 21 zu tun: 15: 18,502301 Gymkhana [4538: 65958] [LayoutConstraints] leider nicht möglich, gleichzeitig Einschränkungen zu erfüllen. Wahrscheinlich ist mindestens eine der Einschränkungen in der folgenden Liste eine, die Sie nicht möchten. Versuchen Sie dies: (1) Blick auf jede Einschränkung und versuchen Sie herauszufinden, was Sie nicht erwarten; (2) finde den Code, der die unerwünschte Bedingung oder die Einschränkungen hinzugefügt und behoben hat. (

"<NSLayoutConstraint:0x78698d60 UILabel:0x7869e890'Identical twins play a mi...'.top == UITableViewCellContentView:0x7869e500.topMargin (active)>", 
"<NSLayoutConstraint:0x7869c930 V:[UILabel:0x79ba65a0'1h']-(8)-[Gymkhana.ThumbnailImageView:0x7869c340] (active)>", 
"<NSLayoutConstraint:0x786a9ef0 H:[Gymkhana.ThumbnailImageView:0x7869c340]-(0)-| (active, names: '|':UITableViewCellContentView:0x7869e500)>", 
"<NSLayoutConstraint:0x78689700 H:|-(0)-[Gymkhana.ThumbnailImageView:0x7869c340] (active, names: '|':UITableViewCellContentView:0x7869e500)>", 
"<NSLayoutConstraint:0x7869a1b0 V:[Gymkhana.ThumbnailImageView:0x7869c340]-(30)-| (active, names: '|':UITableViewCellContentView:0x7869e500)>", 
"<NSLayoutConstraint:0x7869ca10 V:[UILabel:0x7869e890'Identical twins play a mi...']-(8)-[UILabel:0x79ba65a0'1h'] (active)>", 
"<NSLayoutConstraint:0x798fb620 Gymkhana.ThumbnailImageView:0x7869c340.width == Gymkhana.ThumbnailImageView:0x7869c340.height (active)>", 
"<NSLayoutConstraint:0x79b85b80 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7869e500.height == 329 (active)>", 
"<NSLayoutConstraint:0x79b82b80 'UIView-Encapsulated-Layout-Width' UITableViewCellContentView:0x7869e500.width == 320 (active)>") 

Wird durch Zwang zu brechen zu erholen versuchen

<NSLayoutConstraint:0x798fb620 
Gymkhana.ThumbnailImageView:0x7869c340.width==Gymkhana.ThumbnailImageView:0x7869c340.height (active)> 
+1

Können Sie die Strings für die Constraints einschließen und welche Constraint hat es gebrochen? –

+1

Versuchen Sie, die untere Einschränkung zu entfernen. Gibt es immer noch die Warnung? – Yannick

+0

@yannick Entfernen der unteren Einschränkung machen meine Tabelle Zellverkleinerung und die Bildansicht nicht überprüfbar – samitarmum

Antwort

2

Constraints Regeln behandelt werden können, die Autolayout verwendet, wenn sie versuchen 4 Parameter einer Ansicht zu berechnen: x, y (dh Koordinaten des oben links Ecke), Breite und Höhe.Sie setzen 5 Beschränkungen auf Ihre Bildansicht so, bis auf Sonderfälle, wird es einige Konflikte zwischen ihnen geben ..

Die ersten 4 Einschränkungen erwähnt Sie bereits giv e genug Informationen für das AutoLayout, um alle 4 Parameter für das von mir erwähnte imageView zu berechnen. Dann kommt das Seitenverhältnis-Constraint ins Spiel und es ist fast sicher, dass es im Konflikt mit anderen Constraints steht, es sei denn, Ihr vorheriger hat bereits zu genau demselben Aspekt geführt, wie Sie ihn in der Constraint gesetzt haben.

Es gibt zwei Möglichkeiten, wie Sie dieses Problem lösen könnte:

  1. Wenn das Bild bereits auf die Imageview festlegen möchten das Seitenverhältnis hat Sie wollen: entfernen Sie das Verhältnis Einschränkung Aspekt vollständig. Verwenden Sie stattdessen die contentMode-Eigenschaft von imageView.

  2. Wenn Sie wirklich ein bestimmtes Seitenverhältnis zu Ihrem imageView benötigen, dann müssen Sie Ihre anderen 4 Einschränkungen überdenken, da es offensichtlich scheint, dass einige nicht genau darstellen, wie Sie Ihr imageView positionieren und seine Größe ändern möchten . Zum Beispiel: Vielleicht brauchen Sie die führenden und nachlaufenden Einschränkungen nicht, und Sie wollten nur, dass die imageView die gleiche Entfernung von der linken und rechten Seite ihrer Superansicht hat? Entfernen Sie dann die abschließenden und führenden Einschränkungen und fügen Sie stattdessen eine "horizontal zentriert" -Zwangsbedingung hinzu.

+0

fügen Sie eine Mitte horizontal und entfernen Sie Trail und Blei Einschränkung machen meine Bildansicht gebunden zu erweitern größer als die Zelle, die es enthält, so dass es auf der linken Seite abgeschnitten und rechte Seite. Hast du eine andere Lösung? – samitarmum

+1

Wie in Punkt 1: Entfernen Sie die Aspektbedingung vollständig. Setze imageView 'contentMode' auf' UIViewContentModeScaleAspectFit' – johnyu

+0

Der Grund, warum ich die Aspektbeschränkung an erster Stelle hinzufüge, ist dieses Problem: http: // stackoverflow.com/questions/26041820/auto-layout-get-uiimageview-Höhe zu berechnen-Zelle-Höhe-korrekt. – samitarmum

Verwandte Themen