5

Wie das folgende Problem zu debuggen? Gibt es eine Möglichkeit, dieses Problem zu umgehen?Wie debuggen Layout mit Multiline UILabel/automatischem Layout in Benachrichtigung Inhalt Erweiterung

Es scheint ein Bug in iOS 10.2 zu sein und unten bei der Verlegung einer mehrzeiligen UILabel aus.

Ich habe eine ziemlich einfache UIView-Unterklasse, die ich sowohl in der App und Benachrichtigungs Inhalt Erweiterung verwenden, sieht das wie folgt aus:

custom UIView subclass in interface builder

Im Haupt App wird alles gut angelegt:

correct layout when shown in the main app

Wenn in Meldungsinhalt Erweiterung auf iOS 10.2 und unten gezeigt ist, ist das Layout gebrochen. Aber nur, wenn der Text lang genug ist, in mehrere Zeilen aufgeteilt werden. Scheint, wie iOS nicht korrekte Höhe der gesamten Ansicht berechnen kann:

broken layout in iOS 10.2

Allerdings scheint dieses Problem auf iOS 10.3 festgelegt werden:

correct layout in iOS 10.3

Antwort

0

Ich begann mit Experimentieren die Untersichten, insbesondere durch Festlegen von festen Höhenbeschränkungen.

Es stellte sich heraus, es war nicht das Etikett (en), die das Problem verursacht mit Bauhöhe Berechnung aber das Seitenverhältnis constraint (Breite: Höhe) der obersten Ansicht.

Programmatically Höhe der Berechnung auf der Grundlage der Breite der Ansicht und eine Höhe Einschränkung für die betroffene Ansicht Einstellung half das Problem zu beheben:

public override func updateConstraints() { 
    super.updateConstraints() 

    if #available(iOS 10.2, *) { 
     imageContainerHeightConstraint.isActive = false 
    } else { 
     // FIX: multiline label/aspect ratio/autolayout bug in iOS < 10.2 
     let ratio: CGFloat = imageContainerAspectRatioConstraint.multiplier 
     imageContainerHeightConstraint.constant = round(bounds.width/ratio) 
     imageContainerHeightConstraint.isActive = true 
    } 
}