Come posso impostare grassetto e corsivo su UILabel di iPhone / iPad?


Risposte:


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

C'è un elenco di nomi di font che puoi impostare al posto dell'attributo 'fontWithName'. Il link è qui


5
La risposta migliore è quella con il metodo di estensione .withTraits () di @Maksymilian Wojakowski
Nessun rimborso Nessun ritorno

signore signore come impostare lo stile della casella di testo in grassetto senza dichiarare l'obiettivo dimensione c
Ramani Hitesh

3
Ciò è problematico poiché si utilizza un nome di carattere fisso. Poiché questo è soggetto a modifiche, questa non è una buona soluzione. La risposta di Maksymilian Wojakowski è migliore e molto più flessibile.
Ray Wojciechowski,

274

Non provare a giocare con i nomi dei caratteri. Usando il descrittore di font non hai bisogno di nomi:

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 "mantieni le dimensioni così come sono"

Con Swift prova la seguente estensione:

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)
    }

}

Quindi puoi usarlo in questo modo:

myLabel.font = myLabel.font.boldItalic()

o anche aggiungere tratti aggiuntivi come Condensed:

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

Aggiornamento per 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

Usalo come segue:

myLabel.font = myLabel.font.bold

o

myLabel.font = myLabel.font.italic

o

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

Aggiornamento per 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)
    }
}

5
Non so perché questo non ha ricevuto più voti! Per i caratteri in cui non hai uno stile grassetto o corsivo, questo è fantastico!
Chris Prince,

4
Ahhh. Capisco perché forse non è così popolare. Disponibile solo su iOS7 e versioni successive ...
Chris Prince,

3
Non so se questo dovrebbe essere considerato sotto NDA, ma con Xcode6 e iOS8 seed GM, sto ottenendo un descrittore di font nullo per un font personalizzato dove come non era nullo sotto iOS7.
Chris Prince,

@Maksymilian possiamo rifiutare questo metodo da qualche parte in più etichette, ad esempio: uitableview
Majid Bashir,

2
Solo una breve nota poiché questa risposta è così utile: return withTraits(.TraitBold, .TraitCondensed)probabilmente dovrebbe return withTraits(.TraitBold, .TraitItalic)corrispondere al nome della funzione.
BreadicalMD

103

@Edinator dai un'occhiata a questo ..

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

utilizzare una delle opzioni precedenti in qualsiasi momento


1
I due stili non funzionano. In questo caso quest'ultimo prevale in stile corsivo. Grazie per la risposta!
Edi,

@Edinator yups so che devi usarne solo uno alla volta ... avevo modificato anche la mia risposta!
Sudhanshu,

8

Puoi impostare qualsiasi tipo di carattere, famiglia, dimensione per l'etichetta, facendo clic sulla lettera "T" nel campo Carattere .

Etichetta le impostazioni del carattere


Ma ecco la grande domanda, oltre a usare fontWithName: @ "Arial-Light" come si specificano gli altri pesi nello screenshot? Tutto fa apparire boldSystemFontSize (di: __) ma cosa succede se qualcuno vuole la luce o l'ultra-luce?
Dave G,

6

Ho lo stesso problema che devo applicare sia Grassetto che Corsivo su un'etichetta e un pulsante. Puoi semplicemente usare il seguente codice per ottenere questo effetto:

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

1
Penso che intendevi "Arial", non "Ariel" :)
MMMM,

Per Arial non funziona. Ma funziona per Helvetica-BoldOblique. Consulta la documentazione di UIFont qui iphonedevwiki.net/index.php/UIFont
sudip

1
Intendi "HelveticaNeue", non "Arial" :)
jpmartineau,

cosa succede se aggiungiamo il nostro carattere personalizzato .. ??
Majid Bashir,

6

Con il font predefinito di sistema iOS 7, helvetica neue sarà in grassetto se stai cercando di mantenere il font predefinito di sistema.

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

Oppure puoi semplicemente chiamarlo:

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

6

Swift 3

Grassetto:

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

Corsivo:

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

puoi usare il carattere grassetto etichetta / pulsante anche usando questo


3

Ho fatto una variazione della risposta del wojakowski maksymilian in cui è possibile aggiungere o rimuovere un tratto (i)

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)
    }
}

exemple

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

è utile quando riutilizzi la cella e vuoi rimuovere il corsivo che hai messo su un'etichetta in una cella precedente


2

Di recente ho scritto un post sul blog sulle restrizioni dell'API UIFont e su come risolverlo. Puoi vederlo qui

Con il codice che fornisco lì, puoi ottenere il tuo UIFont desiderato come:

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

E poi impostalo sul tuo UILabel (o qualsiasi altra cosa) con: myLabel.font = myFont;


2

Come è già stato menzionato in queste risposte, hai solo bisogno del nome del font giusto . Trovo che iOSFonts.com sia la risorsa più utile per sapere esattamente quale nome usare.


Grande risorsa! L'ho sfogliato sul mio dispositivo iOS e ho trovato un font di bell'aspetto e poi ho usato "fontWithName" per ottenerne un'istanza.
Markus Knappen Johansson,

2

Esempio di testo in grassetto:

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

Esempio di testo in corsivo:

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

2

Anche se la risposta fornita da @tolbard è sorprendente e funziona bene!

Sento che la creazione di un'estensione per qualcosa che può essere ottenuto in una sola riga di codice, sarebbe un'eccessiva uccisione.

Puoi ottenere uno stile grassetto e corsivo per lo stesso testo nel tuo labelimpostando la proprietà font usando UIFontDescriptorcome mostrato nell'esempio sotto usando Swift 4.0 :

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

Altre opzioni includono:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

Per ulteriori informazioni su cosa significano quei tratti simbolici? visita qui


2

Aggiornamento della fantastica risposta di Maksymilian Wojakowski per 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

Questo è molto semplice Ecco il codice

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

Questo ti aiuterà.


Ciò non imposta il corsivo.
mattsson,

Questo imposterà solo in grassetto. Per Italic è possibile utilizzare l'interfaccia builder.
Ashu,

1

Voglio solo menzionarlo,

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

Hanno risultati diversi ...


0

Molte volte il testo in grassetto è considerato in un modo di architettura dell'informazione su un altro livello e quindi non è in grassetto e regolare in una riga, quindi puoi dividerlo in due etichette / textView, uno normale e in grassetto corsivo. E usa l'editor per scegliere gli stili dei caratteri.


0

Con Swift 5

Per stile = grassetto

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

Per stile = Medio

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

Per stile = Sottile

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.