Jak ustawić pogrubienie i kursywę na UILabel na iPhonie / iPadzie?

Odpowiedzi:

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

Istnieje lista nazw czcionek, które można ustawić zamiast atrybutu „fontWithName”. Link znajduje się tutaj

Mobilny programista iOS Android
źródło
5
Lepszą odpowiedzią jest ta z metodą rozszerzenia .withTraits () z @Maksymilian Wojakowski
No
proszę pana, jak ustawić pogrubienie stylu pola tekstowego bez deklarowania celu rozmiaru c
Ramani Hitesh
3
Jest to problematyczne, ponieważ używasz stałej nazwy czcionki. Ponieważ może się to zmienić, nie jest to dobre rozwiązanie. Odpowiedź Maksymiliana Wojakowskiego jest lepsza i dużo bardziej elastyczna.
Ray Wojciechowski
274

Nie próbuj bawić się nazwami czcionek. Używając deskryptora czcionki, nie potrzebujesz nazw:

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 oznacza „zachowaj rozmiar bez zmian”

W Swift wypróbuj następujące rozszerzenie:

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

}

Następnie możesz użyć tego w ten sposób:

myLabel.font = myLabel.font.boldItalic()

lub nawet dodaj dodatkowe cechy, takie jak Condensed:

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

Aktualizacja dla 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

Użyj go w następujący sposób:

myLabel.font = myLabel.font.bold

lub

myLabel.font = myLabel.font.italic

lub

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

Aktualizacja dla 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)
    }
}
Maksymilian Wojakowski
źródło
5
Nie wiem, dlaczego to nie otrzymało więcej głosów! W przypadku czcionek, w których nie ma stylu pogrubienia ani kursywy, jest to świetne!
Chris Prince,
4
Ahhh. Rozumiem, dlaczego może to nie jest tak popularne. Dostępne tylko w iOS7 i nowszych ...
Chris Prince
3
Nie wiem, czy należy to uwzględnić w ramach umowy o zachowaniu poufności, ale w przypadku materiału siewnego Xcode6 i iOS8 GM otrzymuję z powrotem deskryptor czcionki zerowej dla czcionki niestandardowej, ponieważ nie było to zerowe w systemie iOS7.
Chris Prince,
@Maksymilian czy możemy odrzucić tę metodę gdzieś w wielu etykietach, np .: uitableview
Majid Bashir
2
Tylko krótka uwaga, ponieważ ta odpowiedź jest bardzo pomocna: return withTraits(.TraitBold, .TraitCondensed)prawdopodobnie powinno return withTraits(.TraitBold, .TraitItalic)pasować do nazwy funkcji.
BreadicalMD
103

@Edinator spójrz na to ..

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

użyj dowolnego z powyższych w dowolnym momencie

Sudhanshu
źródło
1
Te dwa style nie działają. W tym przypadku dominuje styl kursywa. Dzięki za odpowiedź!
Edi,
@Edinator tak, wiem, że możesz używać tylko jednego na raz ... Ja też zredagowałem moją odpowiedź!
Sudhanshu
8

Możesz ustawić dowolny styl, rodzinę i rozmiar czcionki dla etykiety, klikając literę „T” w polu Czcionka .

Ustawienia czcionek etykiet

ViliusK
źródło
Ale oto ważne pytanie, poza użyciem fontWithName: @ "Arial-Light", jak określić inne wagi na zrzucie ekranu? Wszystko wyświetla boldSystemFontSize (z: __), ale co, jeśli ktoś chce lekkie lub ultralekkie?
Dave G,
6

Mam ten sam problem, który wymaga zastosowania pogrubienia i kursywy na etykiecie i przycisku. Aby osiągnąć ten efekt, możesz po prostu użyć następującego kodu:

myLabel.font = [UIFont fontWithName:@"Arial-BoldItalic" size:30.0];
Nawet Cheng
źródło
1
Myślę, że miałeś na myśli „Arial”, a nie „Ariel” :)
MMMM
Dla Arial to nie działa. Ale to działa dla Helvetica-BoldOblique. Zobacz dokumentację UIFont tutaj iphonedevwiki.net/index.php/UIFont
sudip
1
Masz na myśli „HelveticaNeue”, a nie „Arial” :)
jpmartineau
co, jeśli dodamy naszą niestandardową czcionkę .. ??
Majid Bashir
6

Dzięki domyślnej czcionce systemu iOS 7 będziesz używać helvetica neue bold, jeśli chcesz zachować domyślną czcionkę systemu.

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

Lub możesz to po prostu nazwać:

    [titleText setFont:[UIFont boldSystemFontOfSize:16.0]];
John Riselvato
źródło
6

Szybki 3

Pogrubienie:

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

Italski:

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

Wiaczesław
źródło
3
 btn.titleLabel.font=[UIFont fontWithName:@"Helvetica neue" size:10];
 btn.titleLabel.font =  [UIFont boldSystemFontOfSize:btnPrev.titleLabel.font.pointSize+3];

możesz również użyć tej pogrubionej czcionki etykiety / przycisku

jayesh kavathiya
źródło
3

Zrobiłem wariację odpowiedzi Maksymiliana Wojakowskiego, w której możesz dodać lub usunąć cechę (-y)

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

przykład

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

przydaje się przy ponownym użyciu komórki i chcesz usunąć kursywę, którą umieściłeś na etykiecie w poprzedniej komórce

tolbard
źródło
2

Niedawno napisałem wpis na blogu o ograniczeniach API UIFont i sposobach ich rozwiązania. Możesz to zobaczyć tutaj

Dzięki kodowi, który tam podaję, możesz uzyskać pożądany UIFont tak łatwo, jak:

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

A następnie ustaw go na swój UILabel (lub cokolwiek) za pomocą: myLabel.font = myFont;

Jordi
źródło
2

Jak już wspomniano w tych odpowiedziach, potrzebujesz tylko odpowiedniej nazwy czcionki . Uważam, że iOSFonts.com jest najbardziej pomocnym źródłem informacji o tym, jakiej nazwy należy użyć.

Richard Venable
źródło
Świetny zasób! Przejrzałem go na swoim urządzeniu z systemem iOS i znalazłem dobrze wyglądającą czcionkę, a następnie użyłem „fontWithName”, aby uzyskać jej egzemplarz.
Markus Knappen Johansson
2

Przykład pogrubiony tekst:

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

Przykładowy tekst kursywą:

UILabel *subTitleItalic = [[UILabel alloc] initWithFrame:CGRectMake(10, 35, 200, 30)];
UIFont* myItalicFont = [UIFont italicSystemFontOfSize:[UIFont systemFontSize]];
[subTitleItalic setFont:myItalicFont];
Mer
źródło
2

Chociaż odpowiedź udzielona przez @tolbard jest niesamowita i działa dobrze!

Wydaje mi się, że tworzenie rozszerzenia czegoś, co można osiągnąć w jednej linii kodu, byłoby przesadą.

Możesz uzyskać pogrubienie i kursywę dla tego samego tekstu w swoim label, ustawiając właściwość czcionki, UIFontDescriptorjak pokazano poniżej w poniższym przykładzie, używając Swift 4.0 :

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

Inne opcje obejmują:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

Aby uzyskać więcej informacji o tym, co oznaczają te cechy symboliczne? odwiedź tutaj

iOSer
źródło
2

Aktualizacja wspaniałej odpowiedzi Maksymiliana Wojakowskiego na 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)
    }
}
devjme
źródło
1

To jest bardzo proste. Oto kod.

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

To ci pomoże.

Ashu
źródło
To nie powoduje ustawienia kursywy.
mattsson
Spowoduje to tylko pogrubienie. W przypadku kursywy możesz użyć kreatora interfejsu.
Ashu
1

Chcę tylko o tym wspomnieć,

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

Mają inny wynik ...

ysong4
źródło
0

Często pogrubiony tekst jest traktowany jako architektura informacji na innym poziomie, a zatem nie ma pogrubionego i regularnego w jednej linii, więc można go podzielić na dwie etykiety / textViews, jedną zwykłą i pogrubioną kursywą. I użyj edytora, aby wybrać style czcionek.

Patrik Rikama-Hinnenberg
źródło
0

Dzięki Swift 5

Styl = BOLD

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

Styl = średni

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

Styl = cienki

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)
swiftBoy
źródło