2012-05-01 13 views
32

-systemFontOfSize è troppo sottile e boldSystemFontOfSize troppo spessa. Ho bisogno di qualcosa tra di noi.C'è un carattere di peso medio tra -systemFontOfSize: e -boldSystemFontOfSize :?

Quando creo un UIFont come questo:

[UIFont boldSystemFontOfSize:14]; 

poi il debugger stampe queste informazioni di carattere:

font-family: ".Helvetica NeueUI"; font-weight: grassetto; stile font: normale; font-size: 14px

A volte i caratteri hanno un peso medio. Come posso creare un font di questo tipo ma con un peso medio?

risposta

24

Calling NSLog(@"%@", [UIFont fontNamesForFamilyName:@"Helvetica Neue"]); stampe tutti gli stili di font disponibili per Helvetica Neue, tra loro è HelveticaNeue-Medium che suona come quello che si desidera:

UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:14.0f]; 

Se si vuole fare in modo che il tipo di carattere cambia anche quando i cambiamenti di font di sistema (ad es. come ha fatto con i dispositivi retina da Helvetica a Helvetica Neue) si poteva ottenere prima il carattere di sistema e poi prendere la sua familyName e pointSize per recuperare uno con peso medio con + fontNamesForFamilyName e poi + fontWithName:size:

+1

'boldSystemFontOfSize' utilizza già HelveticaNeue-Medium ... – fabb

+0

Questo non è lo stesso font della versione UI. Secondo la mia esperienza, differisce almeno negli attributi di spaziatura verticale e restituisce un risultato diverso quando si ottiene la proprietà size da una stringa attribuita. –

+1

@ Ben-Uri Il carattere di sistema è cambiato da quando ho scritto quella risposta. La risposta di Andrei è più chiara adesso. – JustSid

71

Startin g con iOS 8.2 è possibile utilizzare:

[UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; 
+1

Si noti che 'UIFontWeightMedium' è un CGFloat, non un enum – onmyway133

16

Swift 2.0, xcode7.1

if #available(iOS 8.2, *) { 
    titleLabel?.font = UIFont.systemFontOfSize(15, weight: UIFontWeightMedium) 
} else { 
    titleLabel?.font = UIFont(name: "HelveticaNeue-Medium", size: 15) 
} 
+0

cosa succede in iOS 8.2 se non uso l'istruzione if e io uso solo titleLabel? .font = UIFont (nome:" HelveticaNeue-Medium ", dimensione: 15) – Jace

0

Swift 2.3 e non cambiare la dimensione del carattere:

extension UIFont { 
    var mediumFont: UIFont { 
     return UIFont.systemFontOfSize(self.pointSize, weight: UIFontWeightMedium) 
    } 
} 

uso con:

titleLabel.font = titleLabel.font.mediumFont 
4

Swift 3:

UIFont.systemFont(ofSize: 14, weight: UIFontWeightMedium) 
0

Con Swift 4, aggiungere questa estensione

extension UIFont { 
    class func mediumSystemFont(ofSize pointSize:CGFloat) -> UIFont { 
     return self.systemFont(ofSize: pointSize, weight: .medium) 
    } 
} 

Poi:

myLabel.font = UIFont.mediumSystemFont(ofSize: 16) 

Lo stesso principio funziona con Semibold, nero, ecc, controllare UIFont.Weight