¿Cómo configuro negrita y cursiva en UILabel de iPhone / iPad?


Respuestas:


132
sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

Hay una lista de nombres de fuentes que puede establecer en lugar del atributo 'fontWithName'. El enlace está aquí


55
La mejor respuesta es la que tiene el método de extensión .withTraits () de @Maksymilian Wojakowski
Sin reembolsos ni devoluciones

señor señor cómo establecer el estilo del cuadro de texto en negrita sin declarar el objetivo de tamaño c
Ramani Hitesh

3
Esto es problemático ya que está utilizando un nombre de fuente fijo. Como esto está sujeto a cambios, esta no es una buena solución. La respuesta de Maksymilian Wojakowski es mejor y mucho más flexible.
Ray Wojciechowski el

274

No intentes jugar con los nombres de las fuentes. Usando el descriptor de fuente no necesita nombres:

UILabel * label = [[UILabel alloc] init]; // use your label object instead of this
UIFontDescriptor * fontD = [label.font.fontDescriptor
            fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold
                            | UIFontDescriptorTraitItalic];
label.font = [UIFont fontWithDescriptor:fontD size:0];

size:0 significa 'mantener el tamaño como está'

Con Swift prueba la siguiente extensión:

extension UIFont {

    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor()
            .fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
        return UIFont(descriptor: descriptor, size: 0)
    }

    func boldItalic() -> UIFont {
        return withTraits(.TraitBold, .TraitItalic)
    }

}

Entonces puede usarlo de esta manera:

myLabel.font = myLabel.font.boldItalic()

o incluso agregar rasgos adicionales como Condensed:

myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic)

Actualización para Swift 4:

extension UIFont {
  var bold: UIFont {
    return with(traits: .traitBold)
  } // bold

  var italic: UIFont {
    return with(traits: .traitItalic)
  } // italic

  var boldItalic: UIFont {
    return with(traits: [.traitBold, .traitItalic])
  } // boldItalic


  func with(traits: UIFontDescriptorSymbolicTraits) -> UIFont {
    guard let descriptor = self.fontDescriptor.withSymbolicTraits(traits) else {
      return self
    } // guard

    return UIFont(descriptor: descriptor, size: 0)
  } // with(traits:)
} // extension

Úselo de la siguiente manera:

myLabel.font = myLabel.font.bold

o

myLabel.font = myLabel.font.italic

o

myLabel.font = myLabel.font.with(traits: [ .traitBold, .traitCondensed ])

Actualización para Swift 5

extension UIFont {
    var bold: UIFont {
        return with(.traitBold)
    }

    var italic: UIFont {
        return with(.traitItalic)
    }

    var boldItalic: UIFont {
        return with([.traitBold, .traitItalic])
    }



    func with(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
        guard let descriptor = self.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits)) else {
            return self
        }
        return UIFont(descriptor: descriptor, size: 0)
    }

    func without(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
        guard let descriptor = self.fontDescriptor.withSymbolicTraits(self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptor.SymbolicTraits(traits))) else {
            return self
        }
        return UIFont(descriptor: descriptor, size: 0)
    }
}

55
¡No sé por qué esto no ha recibido más votos! Para fuentes donde no tienes un estilo en negrita o cursiva, ¡esto es genial!
Chris Prince

44
Ahhh Ya veo por qué quizás esto no es tan popular. Solo disponible en iOS7 y superior ...
Chris Prince

3
No sé si esto debería considerarse bajo NDA, pero con Xcode6 y iOS8 GM seed, obtengo un descriptor de fuente nula para una fuente personalizada donde no era nula en iOS7.
Chris Prince

@Maksymilian podemos rechazar este método en algún lugar en varias etiquetas, es decir: uitableview
Majid Bashir

2
Solo una nota rápida ya que esta respuesta es muy útil: return withTraits(.TraitBold, .TraitCondensed)probablemente debería return withTraits(.TraitBold, .TraitItalic)coincidir con el nombre de la función.
BreadicalMD

103

@Edinator echa un vistazo a esto ...

myLabel.font = [UIFont boldSystemFontOfSize:16.0f]
myLabel.font = [UIFont italicSystemFontOfSize:16.0f];

use cualquiera de los anteriores a la hora que desee


1
Los dos estilos no funcionan. En este caso, este último prevalece en cursiva. ¡Gracias por responder!
Edi

@Edinator sí, sé que tienes que usar solo uno a la vez ... ¡también edité mi respuesta!
Sudhanshu

8

Puede establecer cualquier estilo de fuente, familia, tamaño para la etiqueta, haciendo clic en la letra "T" en el campo Fuente .

Configuración de fuente de etiqueta


Pero aquí está la gran pregunta, además de usar fontWithName: @ "Arial-Light" ¿cómo se especifican los otros pesos en la captura de pantalla? Todo muestra boldSystemFontSize (de: __) pero ¿qué pasa si alguien quiere luz o ultraligera?
Dave G

6

Tengo el mismo problema que necesito aplicar tanto negrita como cursiva en una etiqueta y botón. Simplemente puede usar el siguiente código para lograr este efecto:

myLabel.font = [UIFont fontWithName:@"Arial-BoldItalic" size:30.0];

1
Creo que quisiste decir "Arial", no "Ariel" :)
MMMM

Para Arial no está funcionando. Pero, está funcionando para Helvetica-BoldOblique. Vea la documentación de UIFont aquí iphonedevwiki.net/index.php/UIFont
sudip

1
Te refieres a "HelveticaNeue", no a "Arial" :)
jpmartineau

¿Qué pasa si agregamos nuestra fuente personalizada?
Majid Bashir

6

Con la fuente predeterminada del sistema iOS 7, usará helvetica neue bold si desea mantener la fuente predeterminada del sistema.

    [titleText setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0]];

O simplemente puede llamarlo:

    [titleText setFont:[UIFont boldSystemFontOfSize:16.0]];

6

Swift 3

Negrita:

let bondFont = UIFont.boldSystemFont(ofSize:UIFont.labelFontSize)

Itálico:

let italicFont = UIFont.italicSystemFont(ofSize:UIFont.labelFontSize)


3
 btn.titleLabel.font=[UIFont fontWithName:@"Helvetica neue" size:10];
 btn.titleLabel.font =  [UIFont boldSystemFontOfSize:btnPrev.titleLabel.font.pointSize+3];

puedes hacer una fuente de etiqueta / botón en negrita también usando esto


3

Hice una variación de la respuesta de maksymilian wojakowski donde puedes agregar o eliminar un rasgo (s)

extension UIFont {

    func withTraits(_ traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor
            .withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits))
        return UIFont(descriptor: descriptor!, size: 0)
    }
    func withoutTraits(_ traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor
            .withSymbolicTraits(  self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptorSymbolicTraits(traits)))
        return UIFont(descriptor: descriptor!, size: 0)
    }
    func bold() -> UIFont {
        return withTraits( .traitBold)
    }

    func italic() -> UIFont {
        return withTraits(.traitItalic)
    }

    func noItalic() -> UIFont {
        return withoutTraits(.traitItalic)
    }
    func noBold() -> UIFont {
        return withoutTraits(.traitBold)
    }
}

ejemplo

label.font = label.font.italic().bold()

es útil al reutilizar la celda y desea eliminar la cursiva que puso en una etiqueta en una celda anterior


2

Recientemente escribí una publicación de blog sobre las restricciones de la API de UIFont y cómo resolverla. Puedes verlo aquí

Con el código que proporciono allí, puede obtener su UIFont deseado tan fácil como:

UIFont *myFont = [FontResolver fontWithDescription:@"font-family: Helvetica; font-weight: bold; font-style: italic;"];

Y luego configúrelo en su UILabel (o lo que sea) con: myLabel.font = myFont;


2

Como ya se mencionó en estas respuestas, solo necesita el nombre de fuente correcto . Encuentro que iOSFonts.com es el recurso más útil para saber exactamente qué nombre usar.


Gran recurso! Lo busqué en mi dispositivo iOS y encontré una fuente atractiva y luego usé "fontWithName" para obtener una instancia.
Markus Knappen Johansson

2

Ejemplo de texto en negrita:

UILabel *titleBold = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 30)];
UIFont* myBoldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[titleBold setFont:myBoldFont];

Ejemplo de texto en cursiva:

UILabel *subTitleItalic = [[UILabel alloc] initWithFrame:CGRectMake(10, 35, 200, 30)];
UIFont* myItalicFont = [UIFont italicSystemFontOfSize:[UIFont systemFontSize]];
[subTitleItalic setFont:myItalicFont];

2

¡Aunque la respuesta proporcionada por @tolbard es increíble y funciona bien!

Siento que crear una extensión para algo que se puede lograr con solo una línea de código sería una matanza excesiva.

Puede obtener un estilo en negrita y cursiva para el mismo texto en su labelconfigurando la propiedad de fuente usando UIFontDescriptorcomo se muestra a continuación en el ejemplo a continuación usando Swift 4.0 :

label.font = UIFont(descriptor: UIFontDescriptor().withSymbolicTraits([.traitBold, .traitItalic])!, size: 12)

Otras opciones incluyen:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

Para obtener más información sobre lo que significan esos rasgos simbólicos? visitar aquí


2

Actualizando la increíble respuesta de Maksymilian Wojakowski para swift 3

extension UIFont {
    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont? {
        guard let descriptorL = self.fontDescriptor.withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits)) else{
            return nil
        }
        return UIFont(descriptor: descriptorL, size: 0)
    }

    func boldItalic() -> UIFont? {
        return withTraits(traits: .traitBold, .traitItalic)
    }
}

1

Esto es muy simple. Aquí está el código.

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

Esto te ayudara.


Eso no pone cursiva.
mattsson

Esto se pondrá en negrita solamente. Para Italic puede usarlo por el generador de interfaces.
Ashu

1

Solo quiero mencionar eso,

UIFont.systemFont(ofSize: 16, weight: UIFont.Weight.bold)
UIFont.boldSystemFont(ofSize: 16)

Tienen un resultado diferente ...


0

Muchas veces, el texto en negrita se considera de manera arquitectónica de la información en otro nivel y, por lo tanto, no tiene negrita y regular en una línea, por lo que puede dividirlo en dos etiquetas / vistas de texto, una regular y en negrita y cursiva. Y use el editor para elegir los estilos de fuente.


0

Con Swift 5

Para estilo = BOLD

label.font = UIFont(name:"HelveticaNeue-Bold", size: 15.0)

Para estilo = medio

label.font = UIFont(name:"HelveticaNeue-Medium", size: 15.0)

Para estilo = delgado

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.