ฉันจะตั้งค่าตัวหนาและตัวเอียงบน UILabel ของ iPhone / iPad ได้อย่างไร


138

ฉันจะตั้งค่าตัวหนาและตัวเอียงบนUILabeliPhone / iPad ได้อย่างไร ฉันค้นหาฟอรัม แต่ไม่มีอะไรช่วยฉัน มีใครช่วยฉันบ้าง


หากคุณใช้การกำหนดเองโดยไม่ใช้แบบอักษรตัวเอียงคุณสามารถ [ลองใช้วิธีนี้] [1] [1]: stackoverflow.com/questions/21009957/…
Jakehao

คำตอบ:


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

มีรายการชื่อแบบอักษรที่คุณสามารถตั้งค่าแทนแอตทริบิวต์ 'fontWithName' ลิงก์อยู่ที่นี่


5
คำตอบที่ดีกว่าคือคำตอบด้วยวิธีการขยาย. withTraits () จาก @Maksymilian Wojakowski
ไม่มีการคืนเงินไม่มีผลตอบแทน

วิธีการตั้งค่าสไตล์กล่องข้อความเป็นตัวหนาโดยไม่ต้องประกาศขนาดเป้าหมาย c
Ramani Hitesh

3
นี่เป็นปัญหาเนื่องจากคุณใช้ชื่อฟอนต์คงที่ เนื่องจากอาจมีการเปลี่ยนแปลงจึงไม่ใช่วิธีแก้ปัญหาที่ดี คำตอบจาก Maksymilian Wojakowski นั้นดีกว่าและยืดหยุ่นกว่ามาก
Ray Wojciechowski

274

อย่าพยายามเล่นกับชื่อตัวอักษร การใช้ฟอนต์ descriptor คุณไม่ต้องการชื่อ:

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 หมายถึง 'รักษาขนาดตามที่เป็นอยู่'

ด้วย Swift ลองใช้ส่วนขยายต่อไปนี้:

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

}

จากนั้นคุณสามารถใช้วิธีนี้:

myLabel.font = myLabel.font.boldItalic()

หรือเพิ่มลักษณะเพิ่มเติมเช่นย่อ:

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

อัปเดตสำหรับ 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

ใช้มันดังต่อไปนี้:

myLabel.font = myLabel.font.bold

หรือ

myLabel.font = myLabel.font.italic

หรือ

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

อัปเดตสำหรับ 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
ไม่ทราบว่าเพราะเหตุใดสิ่งนี้จึงไม่ได้รับคะแนนเพิ่มเติม! สำหรับแบบอักษรที่คุณไม่มีสไตล์ที่เป็นตัวหนาหรือตัวเอียงนี่เป็นสิ่งที่ดีมาก!
คริสเจ้าชาย

4
Ahhh ฉันเห็นว่าทำไมนี่อาจไม่เป็นที่นิยม ใช้ได้เฉพาะใน iOS7 และเหนือ ...
คริสเจ้าชาย

3
ไม่ทราบว่าควรพิจารณาสิ่งนี้ภายใต้ NDA หรือไม่ แต่ด้วย Xcode6 และ iOS8 GM seed ฉันได้รับตัวบ่งชี้แบบอักษรศูนย์กลับมาเป็นแบบอักษรที่กำหนดเองซึ่งไม่เป็นศูนย์ภายใต้ iOS7
คริสเจ้าชาย

@Maksymilian เราสามารถปฏิเสธวิธีนี้ที่ใดที่หนึ่งในป้ายกำกับหลายป้ายเช่น: uitableview
Majid Bashir

2
เพียงบันทึกย่อเนื่องจากคำตอบนี้มีประโยชน์มาก: return withTraits(.TraitBold, .TraitCondensed)น่าจะreturn withTraits(.TraitBold, .TraitItalic)ตรงกับชื่อฟังก์ชั่น
BreadicalMD

103

@Edinator ดูในเรื่องนี้ ..

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

ใช้ข้อใดข้อหนึ่งในเวลาที่คุณต้องการ


1
สไตล์ทั้งสองไม่ทำงาน ในกรณีนี้หลังชนะสไตล์ตัวเอียง ขอบคุณสำหรับการตอบ!
Edi

@Edinator yups ฉันรู้ว่าคุณต้องใช้เพียงครั้งเดียว ... ฉันได้แก้ไขคำตอบของฉันด้วย!
Sudhanshu

8

คุณสามารถกำหนดรูปแบบตัวอักษร, ครอบครัว, ขนาดสำหรับฉลากได้โดยคลิกที่ตัวอักษร "T" ในช่องตัวอักษร

การตั้งค่าแบบอักษรของป้ายกำกับ


แต่นี่เป็นคำถามใหญ่นอกเหนือจากการใช้ fontWithName: @ "Arial-Light" คุณจะระบุน้ำหนักอื่นในภาพหน้าจอของคุณได้อย่างไร ทุกอย่างขึ้นมาเป็นตัวหนา (ขนาด: __) แต่ถ้าใครต้องการแสงหรือ ultra-light?
Dave G

6

ฉันมีปัญหาเดียวกันกับที่ต้องใช้ทั้งตัวหนาและตัวเอียงบนฉลากและปุ่ม คุณสามารถใช้รหัสต่อไปนี้เพื่อให้ได้ผลนี้:

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

1
ฉันคิดว่าคุณหมายถึง "Arial" ไม่ใช่ "Ariel" :)
MMMM

สำหรับ Arial มันไม่ทำงาน แต่มันใช้งานได้กับ Helvetica-BoldOblique ดูเอกสาร UIFont ที่นี่iphonedevwiki.net/index.php/UIFont
sudip

1
คุณหมายถึง "HelveticaNeue" ไม่ใช่ "Arial" :)
jpmartineau

จะเป็นอย่างไรถ้าเราเพิ่มแบบอักษรที่กำหนดเองของเรา .. ??
Majid Bashir

6

ด้วยฟอนต์เริ่มต้นของระบบ iOS 7 คุณจะใช้ตัวอักษรเฮลเวติก้าตัวหนาหากคุณต้องการรักษาแบบอักษรเริ่มต้นของระบบ

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

หรือคุณสามารถเรียกมันว่า:

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

6

สวิฟท์ 3

Bold:

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

เอียง:

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

คุณสามารถทำอักษร / ปุ่มตัวหนาได้ด้วย


3

ฉันสร้างรูปแบบของการตอบสนองของ maksymilian wojakowski ซึ่งคุณสามารถเพิ่มหรือลบคุณลักษณะได้

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

กันตัวอย่าง

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

มีประโยชน์เมื่อนำเซลล์กลับมาใช้ใหม่และคุณต้องการลบตัวเอียงที่คุณใส่ไว้ในฉลากในเซลล์ก่อนหน้า


2

ฉันเพิ่งเขียนบทความในบล็อกเกี่ยวกับข้อ จำกัด ของ UIFont API และวิธีการแก้ไข คุณสามารถดูได้ที่นี่

ด้วยรหัสที่ฉันให้ไว้คุณสามารถรับ UIFont ที่คุณต้องการได้ง่ายๆเหมือน:

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

จากนั้นตั้งค่าเป็น UILabel ของคุณ (หรืออะไรก็ตาม) ด้วย: myLabel.font = myFont;


2

ตามที่ได้รับการกล่าวถึงอยู่แล้วในคำตอบเหล่านี้คุณเพียงแค่ต้องมีชื่อตัวอักษรที่ถูกต้อง ฉันพบว่า iOSFonts.comเป็นทรัพยากรที่มีประโยชน์มากที่สุดสำหรับการรู้ว่าต้องใช้ชื่ออะไร


สุดยอดทรัพยากร! ฉันเรียกดูในอุปกรณ์ iOS ของฉันและพบแบบอักษรที่ดูดีจากนั้นใช้ "fontWithName" เพื่อรับอินสแตนซ์ของมัน
Markus Knappen Johansson

2

ตัวอย่างข้อความตัวหนา:

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

ตัวอย่างข้อความตัวเอียง:

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

2

แม้ว่าคำตอบของ @tolbard นั้นยอดเยี่ยมและใช้งานได้ดี!

ฉันรู้สึกว่าการสร้างส่วนขยายสำหรับบางสิ่งบางอย่างที่สามารถทำได้ในเพียงบรรทัดของรหัสจะเป็นการฆ่าที่มากเกินไป

คุณสามารถใส่สไตล์ที่เป็นตัวหนาและตัวเอียงสำหรับข้อความเดียวกันในของคุณlabelโดยการตั้งค่าคุณสมบัติแบบอักษรโดยใช้UIFontDescriptorดังแสดงในตัวอย่างด้านล่างโดยใช้Swift 4.0 :

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

ตัวเลือกอื่น ๆ ได้แก่ :

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับลักษณะของสัญลักษณ์เหล่านั้นหมายความว่าอย่างไร เยี่ยมชมที่นี่


2

การอัพเดตคำตอบที่ยอดเยี่ยมของ Maksymilian Wojakowskiสำหรับ 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

ง่ายมาก นี่คือรหัส

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

สิ่งนี้จะช่วยคุณ


ที่ไม่ได้ตั้งตัวเอียง
mattsson

สิ่งนี้จะตั้งค่าตัวหนาเท่านั้น สำหรับตัวเอียงคุณสามารถใช้โดยเครื่องมือสร้างอินเตอร์เฟส
Ashu

1

แค่อยากพูดถึง

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

พวกเขามีผลลัพธ์ที่แตกต่าง ...


0

หลายครั้งที่ข้อความที่เป็นตัวหนาถูกมองว่าเป็นสถาปัตยกรรมข้อมูลในอีกระดับหนึ่งและดังนั้นจึงไม่มีตัวหนาและปกติในหนึ่งบรรทัดดังนั้นคุณสามารถแยกมันเป็นสองป้ายกำกับ / textViews, หนึ่งปกติและตัวเอียงตัวหนา และใช้โปรแกรมแก้ไขเพื่อเลือกรูปแบบตัวอักษร


0

ด้วยSwift 5

สำหรับ style = BOLD

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

สำหรับ style = Medium

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

สำหรับ style = Thin

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.