5 Stimmen

UILabel rendert Text falsch in IOS7

Ich verwende den folgenden Code, um den Grenzwert eines UILabel zu berechnen

CGRect bound = [lblName.text boundingRectWithSize:(CGSize){206, 99999}
                                    options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                 attributes:stringAttributes
                                          context:nil];

Das UILabel ist in einem UIScrollView eingebettet, der ein Unterview von UITableViewCell ist.

hier was ich bekommen habe

enter image description here

Ich habe einen Test gemacht, bei dem ich ein UILabel in einer Tabellenzelle und ein UILabel separat in einem UIScrollView verwendet habe, und die Ergebnisse waren wie erwartet

enter image description here

Beachten Sie, dass alle Einstellungen (Schriftart, Zeilenumbruchmodus usw.) des UILabel in allen diesen Fällen gleich sind. Der boundingRectWithSize liefert in allen diesen Fällen dasselbe Ergebnis, der einzige Unterschied besteht darin, wie der UILabel den Text rendert.

Wo liegt das Problem? Habe ich etwas übersehen?

UPDATE: Dies tritt nur auf, wenn ich ein UILabel aus dem Nib lade. Wenn es programmatisch erstellt wird, gibt es kein Problem. (mein Projekt wurde von xcode 4 auf xcode 5 migriert)

16voto

Tim Chen Punkte 1296

Versuchen Sie dies:

bound.size.height += 1;

AKTUALISIERUNG:

Laut Apples Dokument

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context

Diese Methode gibt Bruchteile zurück (im Größenkomponenten des zurückgegebenen CGRect); um eine zurückgegebene Größe zum Größen von Ansichten zu verwenden, müssen Sie ihren Wert auf die nächste höhere ganze Zahl mit der ceil Funktion erhöhen.

Also möchten Sie möglicherweise diesen Ansatz verwenden:

bound.size.height = ceil(bound.size.height);

10voto

David Nix Punkte 3304

Ich habe dasselbe Verhalten mit einigen meiner Labels gesehen, die in iOS 6 gut aussahen, aber in iOS 7 zusätzlichen Abstand oben und unten hatten, wie auf Ihren Bildern.

Hier ist, was ich tun musste, um es schließlich in viewDidLoad korrekt zu layouten - funktioniert sowohl auf iOS 6 als auch 7.

self.someLabel.autoresizingMask = UIViewAutoresizingNone;
self.someLabel.frame = CGRectMake(
    self.someLabel.frame.origin.x,
    self.someLabel.frame.origin.y,
    labelWidth, // anderswo definieren, wenn Sie unterschiedliche Bildschirmbreiten ansprechen
    self.someLabel.bounds.size.height);
[self.someLabel sizeToFit];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X