ios - ttf - uifont custom font
Establecer la fuente BOLD en iOS UILabel (8)
Es un negocio sospechoso meterse con los nombres de las fuentes. Y, supuestamente, tiene una fuente en cursiva y quiere hacerla en negrita, simplemente agregando @"-Bold"
al nombre no funciona. Hay una manera mucho más elegante:
- (UIFont *)boldFontWithFont:(UIFont *)font
{
UIFontDescriptor * fontD = [font.fontDescriptor
fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
return [UIFont fontWithDescriptor:fontD size:0];
}
size:0
significa "mantener el tamaño tal como está en el descriptor". Puede encontrar un rasgo UIFontDescriptorTraitItalic
útil si necesita obtener una fuente en cursiva
En Swift, sería bueno escribir una extensión simple:
extension UIFont {
func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
let descriptor = self.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
return UIFont(descriptor: descriptor, size: 0)
}
func bold() -> UIFont {
return withTraits(.TraitBold)
}
func italic() -> UIFont {
return withTraits(.TraitItalic)
}
func boldItalic() -> UIFont {
return withTraits(.TraitBold, .TraitItalic)
}
}
Entonces puedes usarlo de esta manera:
myLabel.font = myLabel.font.boldItalic()
myLabel.font = myLabel.font.bold()
myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic)
He asignado una fuente personalizada de ''Helvetica'' con el tamaño 14 ya para el texto en UILabel utilizando el Interface Builder.
Estoy usando la reutilización de la misma etiqueta en varios lugares, pero en algún lugar tengo que mostrar el texto en negrita.
¿Hay alguna manera de especificar que la fuente existente sea negrita en lugar de crear todo el UIFont de nuevo? Esto es lo que hago ahora:
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14];
Extendiendo this respuesta, en forma rápida:
extension UIFont {
func bold() -> UIFont {
let descriptor = self.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold)
return UIFont(descriptor: descriptor, size: 0)
}
}
Hice la mía un poco diferente con Swift
var boldHelveticaFont = UIFont(name: "Helvetica Neue", size: 40)?.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold)
self.InstructionsTextView.font = UIFont(descriptor: boldHelveticaFont!, size: 40)
Probablemente no necesites una "extensión" como tal, si quieres esto para cualquier fuente personalizada ...
Simplemente agregue una función (similar a la anterior) a la que puede llamar desde cualquier lugar (es decir, sin una clase) y luego puede envalentonar palabras dentro de cualquier cadena, en numerosas ocasiones llamando solo UNA LÍNEA de código:
Para ir en un archivo como constants.swift:
import Foundation
import UIKit
func addBoldText(fullString: NSString, boldPartOfString: NSString, font: UIFont!, boldFont: UIFont!) -> NSAttributedString {
let nonBoldFontAttribute = [NSFontAttributeName:font!]
let boldFontAttribute = [NSFontAttributeName:boldFont]
let boldString = NSMutableAttributedString(string: fullString as String, attributes:nonBoldFontAttribute)
boldString.addAttributes(boldFontAttribute, range: fullString.rangeOfString(boldPartOfString as String))
return boldString
}
Luego puede llamar a esta única línea de código para cualquier UILabel:
self.UILabel.attributedText = addBoldText("Check again in 30 DAYS to find more friends", boldPartOfString: "30 DAYS", font: normalFont!, boldFont: boldSearchFont!)
//Mark: Albeit that you''ve had to define these somewhere:
let normalFont = UIFont(name: "INSERT FONT NAME", size: 15)
let boldFont = UIFont(name: "INSERT BOLD FONT", size: 15)
Solo necesitamos el nombre correcto de la fuente. Me parece que iOSFonts.com es el recurso más útil para saber exactamente qué nombre usar.
Puede establecer Bold + ITALIC, usando FONT NAME "Arial-BoldItalicMT"
Funciona en todos los casos:
[myLabel setFont:[UIFont fontWithName:@"Arial-BoldItalicMT" size:17]];
para "veloces" dar una oportunidad.
este controlador de muestra mostrará 4 etiquetas con todas las variantes.
import UIKit
class ViewController: UIViewController {
var labl: UILabel?
var labl2: UILabel?
var labl3: UILabel?
var labl4: UILabel?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let font = UIFont.systemFontOfSize(32)
labl = UILabel(frame: CGRectMake(20,20,400, 45))
labl!.text = "Attention:"
labl!.font = font
labl2 = UILabel(frame: CGRectMake(20,60,400, 45))
labl2!.text = "Attention:"
labl2!.font = bold(font)
labl3 = UILabel(frame: CGRectMake(20,100,400, 45))
labl3!.text = "Attention:"
labl3!.font = italic(font)
labl4 = UILabel(frame: CGRectMake(20,140,400, 45))
labl4!.text = "Attention:"
labl4!.font = boldAndItalic(font)
self.view.addSubview(labl!)
self.view.addSubview(labl2!)
self.view.addSubview(labl3!)
self.view.addSubview(labl4!)
}
// nice to write an extension...
func bold(font: UIFont) -> UIFont {
let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitBold])
return UIFont(descriptor: descriptor, size: 0)
}
func boldAndItalic(font: UIFont) -> UIFont {
let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitBold, .TraitItalic])
return UIFont(descriptor: descriptor, size: 0)
}
func italic(font: UIFont) -> UIFont {
let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitItalic])
return UIFont(descriptor: descriptor, size: 0)
}
}
Sería bueno escribir una extensión para la clase UIFont.
ACTUALIZAR:
Comenzando con iOS 8, ya no es necesario jugar con los nombres de las fuentes. En su lugar, vea las respuestas más recientes que usan UIFontDescriptorSymbolicTraits
: here y here .
myLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
Si desea configurarlo mediante programación, debe verificar que el tipo en negrita sea compatible o no con iOS, normalmente Bold o Italic tendrán formato FontName-Bold, FontName-Italic, FontName-BoldItalic.
Ahora, escribe una función audaz
-(void)boldFontForLabel:(UILabel *)label{
UIFont *currentFont = label.font;
UIFont *newFont = [UIFont fontWithName:[NSString stringWithFormat:@"%@-Bold",currentFont.fontName] size:currentFont.pointSize];
label.font = newFont;
}
Entonces llámalo
[self boldFontForLabel:yourLabel];
UIFont* boldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[myLabel setFont:boldFont];