Làm cách nào để đặt chữ đậm và chữ nghiêng trên UILabel của iPhone / iPad?


138

Làm cách nào để đặt đậm và nghiêng trên UILabeliPhone / iPad? Tôi đã tìm kiếm trên diễn đàn nhưng không có gì giúp tôi. Có ai giúp tôi không?


Nếu bạn đang sử dụng tùy chỉnh mà không có phông chữ nghiêng, bạn có thể [thử phương pháp này.] [1] [1]: stackoverflow.com/questions/21009957/
trộm

Câu trả lời:


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

Có một danh sách các tên phông chữ mà bạn có thể đặt thay cho thuộc tính 'fontWithName'. Liên kết ở đây


5
Câu trả lời tốt hơn là câu trả lời với phương thức mở rộng .withTraits () từ @Maksymilian Wojakowski
Không hoàn lại tiền Không trả lại

Thưa ngài, làm thế nào để thiết lập kiểu chữ đậm mà không cần khai báo kích thước mục tiêu c
Ramani Hitesh

3
Đây là vấn đề vì bạn đang sử dụng một tên phông chữ cố định. Vì đây là chủ đề để thay đổi nên đây không phải là giải pháp tốt. Câu trả lời từ Maksymilian Wojakowski là tốt hơn và linh hoạt hơn nhiều.
Ray Wojciechowski

274

Đừng cố chơi với tên phông chữ. Sử dụng bộ mô tả phông chữ bạn không cần tên:

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 có nghĩa là 'giữ nguyên kích thước'

Với Swift hãy thử tiện ích mở rộng sau:

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

}

Sau đó, bạn có thể sử dụng nó theo cách này:

myLabel.font = myLabel.font.boldItalic()

hoặc thậm chí thêm các đặc điểm bổ sung như Ngưng tụ:

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

Cập nhật cho 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

Sử dụng nó như sau:

myLabel.font = myLabel.font.bold

hoặc là

myLabel.font = myLabel.font.italic

hoặc là

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

Cập nhật cho 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
Không biết tại sao điều này không nhận được nhiều phiếu hơn! Đối với các phông chữ mà bạn không có kiểu in đậm hoặc in nghiêng, điều này thật tuyệt!
Hoàng tử Chris

4
À Tôi thấy tại sao có lẽ điều này không phổ biến. Chỉ khả dụng trong iOS7 trở lên ...
Chris Prince

3
Không biết điều này có nên được xem xét trong NDA hay không, nhưng với hạt giống GM Xcode6 và iOS8, tôi sẽ nhận được một bộ mô tả phông chữ không cho phông chữ tùy chỉnh trong khi nó không có trong iOS7.
Hoàng tử Chris

@Maksymilian chúng ta có thể từ chối phương pháp này ở đâu đó trong nhiều nhãn, ví dụ: uitableview
Majid Bashir

2
Chỉ cần một lưu ý nhanh vì câu trả lời này rất hữu ích: return withTraits(.TraitBold, .TraitCondensed)có lẽ nên return withTraits(.TraitBold, .TraitItalic)khớp với tên hàm.
BreadicalMD

103

@Edinator có một cái nhìn về điều này ..

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

sử dụng bất kỳ một trong những điều trên tại một thời điểm bạn muốn


1
Hai phong cách không hoạt động. Trong trường hợp này, cái sau chiếm ưu thế kiểu chữ nghiêng. Cảm ơn đã trả lời!
Edi

@Edinator yups Tôi biết rằng bạn chỉ phải sử dụng một lần duy nhất ... tôi cũng đã chỉnh sửa câu trả lời của mình!
Sudhanshu

8

Bạn có thể đặt bất kỳ kiểu phông chữ, họ, kích thước cho nhãn, bằng cách nhấp vào chữ "T" trong trường Phông chữ .

Cài đặt phông chữ nhãn


Nhưng đây là câu hỏi lớn, bên cạnh việc sử dụng fontWithName: @ "Arial-Light", làm thế nào để bạn chỉ định các trọng số khác trong ảnh chụp màn hình của bạn? Mọi thứ đều mang đến boldSystemFontSize (của: __) nhưng nếu ai đó muốn ánh sáng hoặc siêu nhẹ thì sao?
Dave G

6

Tôi có cùng một vấn đề cần áp dụng cả Bold và Italic trên nhãn và nút. Bạn chỉ có thể sử dụng mã sau đây để đạt được hiệu ứng này:

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

1
Tôi nghĩ, bạn có nghĩa là "Arial", không phải "Ariel" :)
MMMM

Đối với Arial nó không hoạt động. Nhưng, nó hoạt động cho Helvetica-BoldOblique. Xem tài liệu UIFont đây iphonedevwiki.net/index.php/UIFont
Sudip

1
Bạn có nghĩa là "HelveticaNeue", không phải "Arial" :)
jpmartineau

Điều gì nếu chúng ta thêm phông chữ tùy chỉnh của chúng tôi .. ??
Majid Bashir

6

Với phông chữ mặc định của hệ thống iOS 7, bạn sẽ sử dụng chữ in đậm helvetica neue nếu bạn muốn giữ phông chữ mặc định của hệ thống.

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

Hoặc bạn có thể gọi nó đơn giản:

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

6

Swift 3

Dũng cảm:

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

Chữ nghiêng:

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

bạn cũng có thể in đậm nhãn / phông chữ nút


3

Tôi đã thực hiện một biến thể của phản ứng của maksymilian wojakowski nơi bạn có thể thêm hoặc xóa một đặc điểm

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

mẫu mực

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

nó hữu ích khi sử dụng lại ô và bạn muốn xóa chữ nghiêng bạn đặt trên nhãn trong ô trước đó


2

Gần đây tôi đã viết một bài đăng trên blog về các hạn chế của UIFont API và cách giải quyết nó. Bạn có thể thấy nó ở đây

Với mã tôi cung cấp ở đó, bạn có thể nhận được UIFont mong muốn của mình dễ dàng như:

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

Và sau đó đặt nó vào UILabel của bạn (hoặc bất cứ điều gì) với: myLabel.font = myFont;


2

Như đã được đề cập trong các câu trả lời này, bạn chỉ cần đúng tên phông chữ . Tôi thấy rằng iOSFonts.com là tài nguyên hữu ích nhất để biết chính xác tên nào sẽ sử dụng.


Tài nguyên tuyệt vời! Tôi đã duyệt nó trong thiết bị iOS của mình và tìm thấy một phông chữ đẹp và sau đó sử dụng "fontWithName" để lấy ví dụ về nó.
Markus Knappen Johansson

2

Ví dụ Văn bản in đậm:

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

Ví dụ văn bản in nghiêng:

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

2

Mặc dù câu trả lời được cung cấp bởi @tolbard rất tuyệt vời và hoạt động tốt!

Tôi cảm thấy việc tạo ra một phần mở rộng cho một cái gì đó có thể đạt được chỉ trong một dòng mã, sẽ là một sự tiêu diệt quá mức.

Bạn có thể lấy kiểu in đậm cũng in nghiêng cho cùng một văn bản labelbằng cách thiết lập thuộc tính phông chữ bằng cách sử dụng UIFontDescriptornhư được hiển thị bên dưới trong ví dụ bên dưới bằng Swift 4.0 :

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

Các tùy chọn khác bao gồm:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

Để biết thêm thông tin về những đặc điểm tượng trưng có nghĩa là gì? truy cập vào đây


2

Cập nhật câu trả lời tuyệt vời của Maksymilian Wojakowski cho 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

Điều này rất đơn giản. Đây là mã.

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

Điều này sẽ giúp bạn.


Điều đó không đặt chữ nghiêng.
mattsson

Điều này sẽ chỉ in đậm. Đối với Italic bạn có thể sử dụng bởi trình xây dựng giao diện.
Ashu

1

Chỉ muốn đề cập đến điều đó,

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

Họ có kết quả khác nhau ...


0

Nhiều lần văn bản in đậm được xem xét theo cách kiến ​​trúc thông tin ở cấp độ khác và do đó không được in đậm và đều đặn trong một dòng, vì vậy bạn có thể chia nó thành hai nhãn / textViews, một chữ thường và in nghiêng. Và sử dụng trình chỉnh sửa để chọn các kiểu phông chữ.


0

Với Swift 5

Đối với phong cách = ĐẬM

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

Đối với phong cách = Trung bình

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

Dành cho phong cách = Mỏng

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.