2014-11-07 9 views
5

Ich lasse die Benutzer eine UITextField oben auf ihre Bilder wie eine Beschriftung hinzufügen.Skalierung der UIFont-Größe relativ zur Bildschirmgröße

Ich habe es so entworfen, dass ihre Bilder alle perfekte Quadrate nach ihrer iPhone-Bildschirmgröße sind. Also auf meinem iPhone 5S wäre es ein 320x320 UIImageView. Ein iPhone 6 wäre 375x375 UIImageView. Bilder, die von größeren Bildschirmtelefonen gepostet werden, werden von der Bildansicht verkleinert, wenn sie im kleineren Telefon angezeigt werden.

Wie lege ich eine Schriftgröße fest, die relativ zur Bildschirmbreite ist?

Ich bin derzeit mit:

[UIFont systemFontOfSize:16.0] 

Wäre es sinnvoll sein, diese zu benutzen ?:

[UIFont systemFontOfSize:self.frame.size.width/20]; 

Ich bin nicht sicher, welche Punktgröße darstellt tatsächlich in einer Schriftgröße. Ich habe auch gefunden [UIFont preferredFontForTextStyle:UIFontTextStyleBody];, aber ich bin mir nicht sicher, ob das, was ich suche.

Dank

Antwort

1

UIFont verfügt über eine Methode, die Ihnen die Schriftgröße des Systems erhält. Sie können dann verwenden, um eine sinnvolle Schriftgröße dynamisch zu berechnen. Was vernünftig ist, liegt bei Ihnen, zu testen und zu experimentieren. Das wäre so etwas wie dies führt:

UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]*[UIScreen mainScreen].bounds.width/375.0]; 
+0

Hmm, systemFontSize kann jedoch stark variieren, da es von der korrekten Einstellung der iOS-Schriftgröße des Benutzers abhängt. Ich bin mir nicht sicher, ob dies ein idealer Wert wäre. Danke – user339946

+0

Ja, ich denke es tut. Ich denke jedoch, dass es ein guter Rahmen ist, um zu respektieren. Wenn Sie dies jedoch nicht tun möchten, definieren Sie einfach eine Größe, die für Sie als Standard funktioniert. – Rick

1

Es ist ein bisschen übertrieben, aber zu bekommen, dass mein Text auf dem Bildschirm paßt i eine Schleife mache die Schriftgröße, um herauszufinden, (weil ich diesen Textes bin Rendering in einem benutzerdefinierte drawRect Implementierung (möglicherweise gibt es einen besseren Weg, wenn Sie UILabel verwenden) anpassen

float FACTOR = 0.5f; 
    UIFont *font = [UIFont fontWithName:_fontName size:_maximumSize]; 
    // paragraph for both 
    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
    paragraphStyle.alignment  = NSTextAlignmentCenter; 
    // attributes for back 
    NSDictionary *attributes = @{NSFontAttributeName   : font, 
           NSParagraphStyleAttributeName : paragraphStyle}; 
    CGSize textSize = [_text sizeWithAttributes:attributes]; 
    // reduce font size until the text fits in bounds 
    while(textSize.width > _view.bounds.size.width * FACTOR || textSize.height > _view.bounds.size.height * FACTOR) 
    { 
     _maximumSize--; 
     font  = [font fontWithSize:_maximumSize]; 
     attributes = @{NSFontAttributeName   : font, 
         NSParagraphStyleAttributeName : paragraphStyle}; 
     textSize = [_progressText sizeWithAttributes:attributes]; 
    } 

einfach die FACTOR die Schriftform im Verhältnis zu den Ansichten Grenzen machen

0

In Swift. 4:

let textToFit: String = ... 
let maxWidth: CGFloat = ... 
var font: UIFont = ... 
var textAttributes: [NSAttributedStringKey: Any] = [ 
     .font: font, 
     ... 
    ] 

while (textToFit.size(withAttributes: textAttributes).width > maxWidth) 
{ 
    font = font.withSize(font.pointSize - 1.0) 
    textAttributes[.font] = font 
} 

// You have your font now!