2015-04-15 6 views

Antwort

15

Wie gesagt, ich hatte ein sehr nerviges Problem, wo benutzerdefinierte Schriftarten in einem UILabel wegen etwas abgeschnitten werden würde. Ich fand später heraus, dass es wegen ascenders and descenders (Schriftarteigenschaften) war.

Nach vielen Suchen fand ich eine solution, die Sie benötigt, um ein Programm herunterzuladen, passen Sie die Oberlänge und Unterlänge der Schriftart mit Terminal und dann testen Sie es auf Ihrer App, bis es perfekt ist.

wäre dieser in Ordnung, wenn ich nicht für diese 20+ Fonts zu tun hatte. Also beschloss ich, herumzugrabeln und zu sehen, ob ich auf die Ober- und Unterlängenwerte einer Schrift zugreifen konnte. Stellt sich heraus, UIFont hat diese genauen Attribute!

Mit dieser Information konnte ich UILabel ableiten und seinen Rahmen dynamisch anpassen, indem ich die Ober- und Unterlängenwerte (verwenden Sie den absoluten Wert, da er negativ ist) zu seiner Höhe hinzufügt.

Hier ist ein Ausschnitt aus dem Implementierungscode unter der letzten Zeile ist die Geldlinie:

UIFont *font = [UIFont fontWithName:nameOfFontUsed size:44.0]; 
NSDictionary *attrsDict = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; 
NSMutableAttributedString *theString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@", enteredString] attributes:attrsDict]; 

//Add other attributes you desire 

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping; 
paragraphStyle.lineHeightMultiple = 5.0; 
[theString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [theString length])]; 

[self setAttributedText:theString]; 

[self sizeToFit]; 

[self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height+font.ascender+ABS(font.descender))]; 
+2

Ich verstehe Sie die UILabel subclassed. Welche Methode hast du außer Kraft gesetzt und den obigen Code eingegeben? – mixtly87

+0

Mein Tag gerettet! Vielen Dank. –

2

Try intrinsicContentSize Eigenschaft in UILabel außer Kraft zu setzen.

Ich glaube nicht, das ist die beste Praxis ist, aber leicht Problem in einigen Fällen zu lösen.

Beispiel für Swift 3

class ExpandedLabel: UILabel { 

    override var intrinsicContentSize: CGSize { 

    let size = super.intrinsicContentSize 

    // you can change 'addedHeight' into any value you want. 
    let addedHeight = font.pointSize * 0.3 

    return CGSize(width: size.width, height: size.height + addedHeight) 
    } 
} 
Verwandte Themen