5

Jak debugować następujący problem? Czy istnieje sposób obejścia tego problemu?Jak debugować układ z Multiline UILabel/autolayout w rozszerzeniu zawartości powiadomień

Wygląda na to, że w systemie iOS 10.2 i nowszych wystąpił błąd podczas tworzenia wieloliniowej biblioteki UILabel.

Mam dość proste UIView podklasy, które używam zarówno w aplikacji i zawartości zgłoszenie rozszerzenia, które wygląda następująco:

custom UIView subclass in interface builder

W głównym aplikacji, wszystko układa się dobrze:

correct layout when shown in the main app

Po wyświetleniu rozszerzenia treści powiadomień w systemie iOS 10.2 i poniżej układ jest uszkodzony. Ale tylko wtedy, gdy tekst jest wystarczająco długi, aby można go było podzielić na wiele linii. Wygląda na iOS nie może obliczyć prawidłową wysokość całego Widok:

broken layout in iOS 10.2

Jednak kwestia ta wydaje się być ustalona na iOS 10.3 i nowszych:

correct layout in iOS 10.3

Odpowiedz

0

zacząłem eksperymentować z subviews, w szczególności poprzez ustawienie stałych ograniczeń wysokości.

Okazuje się, że nie było etykiety (s), które spowodowało problem z obliczenia całkowitej wysokości ale aspekt stosunek ograniczeniem (szerokość: wysokość), na wierzchniej widzenia.

Programowo obliczania wysokości na podstawie szerokości widoku i ustawiania ograniczenia wysokości na widok chorego pomogły rozwiązać ten problem:

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 
    } 
}