Como definir negrito e itálico no UILabel do iPhone / iPad?


Respostas:


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

Há uma lista de nomes de fontes que você pode definir no lugar do atributo 'fontWithName'. O link está aqui


5
A melhor resposta é aquela com o método de extensão .withTraits () de @Maksymilian Wojakowski
Não há reembolso Não há retorno

senhor senhor como conjunto de estilo caixa de texto em negrito sem tamanho declarar c objetivo
Ramani Hitesh

3
Isso é problemático, pois você está usando um nome de fonte fixo. Como isso está sujeito a alterações, essa não é uma boa solução. A resposta de Maksymilian Wojakowski é melhor e muito mais flexível.
Raio Wojciechowski

274

Não tente brincar com os nomes das fontes. Usando o descritor de fontes, você não precisa de nomes:

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 'manter o tamanho como está'

Com o Swift, tente a seguinte extensão:

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

}

Então você pode usá-lo desta maneira:

myLabel.font = myLabel.font.boldItalic()

ou até adicionar características adicionais, como Condensado:

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

Atualização para o 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

Use-o da seguinte maneira:

myLabel.font = myLabel.font.bold

ou

myLabel.font = myLabel.font.italic

ou

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

Atualização para o 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
Não sei por que isso não recebeu mais votos! Para fontes em que você não tem um estilo negrito ou itálico, isso é ótimo!
Chris Príncipe

4
Ahhh. Eu vejo por que talvez isso não seja tão popular. Apenas disponível em iOS7 e acima ...
Chris Príncipe

3
Não sei se isso deve ser considerado no NDA, mas com a semente GM Xcode6 e iOS8, estou recebendo um descritor de fonte nulo de volta para uma fonte personalizada, onde não era nulo no iOS7.
Chris Prince

@Maksymilian podemos recusar esta em algum lugar método em várias etiquetas ou seja: uitableview
Majid Bashir

2
Apenas uma observação rápida, já que esta resposta é muito útil: return withTraits(.TraitBold, .TraitCondensed)provavelmente deve return withTraits(.TraitBold, .TraitItalic)corresponder ao nome da função.
precisa saber é o seguinte

103

@ Eddinator, dê uma olhada nisso ..

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

use qualquer uma das opções acima na hora que desejar


1
Os dois estilos não funcionam. Nesse caso, o último prevalece no estilo itálico. Obrigado pela resposta!
Edi

@ Eddinator yups, eu sei que você tem que usar apenas um de cada vez ... eu tinha editado minha resposta também!
Sudhanshu

8

Você pode definir qualquer estilo de fonte, família, tamanho para o rótulo, clicando na letra "T" no campo Fonte .

Configurações de fonte da etiqueta


Mas aqui está a grande questão: além de usar fontWithName: @ "Arial-Light", como você especifica os outros pesos na sua captura de tela? Tudo traz o boldSystemFontSize (de: __), mas e se alguém quiser luz ou luz ultraleve?
Dave G

6

Eu tenho o mesmo problema que precisa aplicar negrito e itálico em um rótulo e botão. Você pode simplesmente usar o seguinte código para obter esse efeito:

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

1
Eu acho que, você quis dizer "Arial", e não "Ariel" :)
MMMM

Para Arial, não está funcionando. Mas, está trabalhando para Helvetica-BoldOblique. Veja a documentação do UIFont aqui iphonedevwiki.net/index.php/UIFont
sudip

1
Você quer dizer "HelveticaNeue", não "Arial" :)
jpmartineau

e se adicionarmos nossa fonte personalizada .. ??
Majid Bashir

6

Com a fonte padrão do sistema iOS 7, você usará helvetica neue bold se quiser manter a fonte padrão do sistema.

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

Ou você pode simplesmente chamá-lo:

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

6

Swift 3

Negrito:

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

você também pode usar a fonte de rótulo / botão em negrito


3

Fiz uma variação da resposta de maksymilian wojakowski onde você pode adicionar ou remover uma característica

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

exemplo

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

útil ao reutilizar a célula e você deseja remover o itálico colocado em um rótulo em uma célula anterior


2

Recentemente, escrevi um post sobre as restrições da API do UIFont e como resolvê-lo. Você pode ver aqui

Com o código que forneço lá, você pode obter o UIFont desejado da maneira mais fácil:

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

E defina-o como UILabel (ou o que for) com: myLabel.font = myFont;


2

Como já foi mencionado nessas respostas, você só precisa do nome da fonte correto . Acho que o iOSFonts.com é o recurso mais útil para saber exatamente qual nome usar.


Ótimo recurso! Eu procurei no meu dispositivo iOS e encontrei uma fonte bonita e depois usei "fontWithName" para obter uma instância dela.
Markus Knappen Johansson

2

Exemplo de texto em negrito:

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

Exemplo de texto em itálico:

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

2

Embora a resposta fornecida por @tolbard seja incrível e funcione bem!

Sinto que criar uma extensão para algo que pode ser alcançado em apenas uma linha de código seria um exagero.

Você pode obter um estilo em negrito e itálico para o mesmo texto labelconfigurando a propriedade da fonte usando UIFontDescriptorcomo mostrado abaixo no exemplo abaixo usando o Swift 4.0 :

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

Outras opções incluem:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

Para mais informações sobre o significado desses traços simbólicos? visite aqui


2

Atualizando a incrível resposta de Maksymilian Wojakowski para o 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

Isto é muito simples. Aqui está o código.

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

Isso irá ajudá-lo.


Isso não define itálico.
Mattsson

Isso definirá apenas negrito. Para itálico, você pode usar pelo construtor de interface.
Ashu

1

Só quero mencionar isso,

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

Eles têm resultados diferentes ...


0

Muitas vezes, o texto em negrito é considerado em uma arquitetura de informações em outro nível e, portanto, não possui negrito e regular em uma linha, portanto, você pode dividi-lo em dois rótulos / textViews, um regular e em negrito e itálico. E use o editor para escolher os estilos de fonte.


0

Com o Swift 5

Para o estilo = Negrito

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

Para estilo = Médio

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

For style = Thin

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.