2016-06-28 12 views
1

Ich habe eine UITableViewController mit einem benutzerdefinierten Prototyp-Zelle mit drei Etiketten und einem Knopf. Das mittlere Label (descriptionLabel) ist ein mehrzeiliges Label mit Zeilenumbruch als Option "Zeilenumbrüche" und 0 Zeilen im Attribute-Inspektor.Zeilenumbruch Zeilenumbruch funktioniert nicht in UILabel nur für bestimmten Text Strings

Wenn ich die descriptionLabel.text Eigenschaft eine wörtliche String zuweisen, arbeitet die Zeilenumbruch-Option in Ordnung, wie im folgenden Bild gezeigt:

Cell with Word Wrap working

Das Problem ist, dass die descriptionLabel ‚s Text von einem kommt Objekt. Dieses Objekt wird von einem Webdienst heruntergeladen und lokal gespeichert. Es wird außerdem zum Füllen aller anderen Beschriftungen der Zelle verwendet. In diesem Fall

Cell with Word Wrap NOT working

:

Wenn ich ordne Sie den Objekt-Eigenschaft-String an die descriptionLabel ‚s Text (cell.descriptionLabel.text = monthlyPaymentType.detail), jedoch ist der Zeilenumbruch nicht funktioniert, wie im Bild unten gezeigt "cobrado" ist ein Wort, aber es wird in Buchstaben verpackt anstatt in Worte zu fassen.

Es ist seltsam, denn wenn ich das Ergebnis print(monthlyPaymentType.detail), fügen Sie als Zeichenkette und weist es cell.descriptionLabel.text kopieren, funktioniert der Zeilenumbruch Option auch nicht Arbeit.

Aber wenn ich manuell eine Zeichenkette mit genau dem gleichen Inhalt von print(monthlyPaymentType.detail) und weise es cell.descriptionLabel.text, der Zeilenumbruch Option Arbeit tut ein.

Mache ich etwas falsch bei der Konfiguration des Labels? Gibt es ein Problem mit der gespeicherten Zeichenfolge in meinem Objekt?

Antwort

1

Das Problem ist, dass die Leerzeichen in den Strings, die vom Server kommen und in den Objekten gespeichert sind Unicode Non-Breaking Spaces (U + 00A0). Wenn diese Zeichenfolgen der UILabeltext -Eigenschaft zugewiesen sind, werden Non-Breaking Spaces nicht als Worttrennzeichen betrachtet.

Um dieses Problem zu lösen, ersetze ich die Vorkommen von U + 00A0 Zeichen mit gemeinsamen Unicode-Leerzeichen (U + 0020), stringByReplacingOccurrencesOfString("\u{00A0}", withString: "\u{0020}") Methode verwenden.