2014-11-07 17 views
5

Sto permettendo agli utenti di aggiungere un UITextField sopra le immagini come didascalia.Ridimensionamento delle dimensioni UIFont relative alle dimensioni dello schermo

L'ho progettato in modo che le loro immagini siano tutte quadrate perfette in base alle dimensioni dello schermo dell'iPhone. Quindi sul mio iPhone 5S, sarebbe un 320x320 UIImageView. Un iPhone 6 sarebbe 375x375 UIImageView. Le immagini inviate da telefoni con schermo più grande vengono ridimensionate da imageView quando vengono visualizzate nel telefono più piccolo.

Come impostare una dimensione del carattere relativa alla larghezza dello schermo?

Attualmente sto usando:

[UIFont systemFontOfSize:16.0] 

sarebbe opportuno utilizzare questo ?:

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

Non sono sicuro di quello che dimensione punto rappresenta in realtà in una dimensione di carattere. Ho anche trovato [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; ma non sono sicuro se questo è quello che sto cercando.

Grazie

risposta

1

UIFont ha un metodo che si ottiene la dimensione del carattere del sistema. È quindi possibile utilizzarlo per calcolare dinamicamente una dimensione del carattere ragionevole. Ciò che è ragionevole spetterà a te testare e sperimentare. Ciò porterebbe a qualcosa di simile:

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

Hmm, systemFontSize può variare notevolmente, in quanto dipende dall'impostazione della dimensione del carattere di iOS dell'utente corretta? Non sono sicuro che sarebbe un valore ideale da usare. Grazie – user339946

+0

Sì, penso di sì. Tuttavia penso che sia una buona impostazione da rispettare. Se non vuoi farlo, devi solo definire una dimensione che funzioni automaticamente come predefinita. – Rick

1

è un po 'eccessivo, ma per ottenere che il mio testo si adatta allo schermo sto facendo un ciclo per scoprire la dimensione del carattere (perché sto il rendering questo testo in un personalizzato drawRect implementazione (ci potrebbe essere un modo migliore se si utilizza UILabel)

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]; 
    } 

è sufficiente regolare la FACTOR per rendere il carattere relativo adattamento alle viste limiti

0

a 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! 
Problemi correlati