Ich möchte ein Standard UILabel nehmen und die Schriftgröße erhöhen, so dass es den vertikalen Raum füllt. Inspiriert von der akzeptierten Antwort für diesen question, definierte ich eine Unterklasse auf UILabel mit dieser drawRect Umsetzung:Skalierung der Schriftgröße, um vertikal in UILabel zu passen
- (void)drawRect:(CGRect)rect
{
// Size required to render string
CGSize size = [self.text sizeWithFont:self.font];
// For current font point size, calculate points per pixel
float pointsPerPixel = size.height/self.font.pointSize;
// Scale up point size for the height of the label
float desiredPointSize = rect.size.height * pointsPerPixel;
// Create and assign new UIFont with desired point Size
UIFont *newFont = [UIFont fontWithName:self.font.fontName size:desiredPointSize];
self.font = newFont;
// Call super
[super drawRect:rect];
}
Aber das funktioniert nicht, wie es die Schrift über die Unterseite des Etiketts skaliert. Wenn Sie das replizieren wollen, habe ich mit einem Label 289x122 (w x h), Helvetica als Font und einer Startpunktgröße von 60 angefangen, die gut in das Label passt. Hier ist beispielsweise Ausgabe von dem Standard UILabel und meine Unterklasse mit der Zeichenfolge „{Hg“:
Ich habe in der Schrift Ober- und Unterlängen sah, versuchte Skalierung diese unter Berücksichtigung der in verschiedene Kombinationen, hatten aber immer noch kein Glück. Irgendwelche Ideen, hat das etwas mit unterschiedlichen Schriftarten zu tun, die unterschiedliche Unterlängen und Oberlängen haben?
naja ... das war ein peinlich einfacher Fehler. Danke, dass du es gesehen hast. – user524261
Ich habe versucht, es in 'layoutSubviews' zu implementieren, aber ich glaube nicht, dass es funktioniert. Ich denke, der Grund ist, dass das Zuweisen einer neuen Schriftart zu der Unterklasse "UILabel" einen anderen Aufruf von "layoutSubviews" auslöst, was problematisch ist. In meiner Implementierung wurde eine der Warteschlangen meiner App gesperrt. – user444731