在iOS中实现UILabel的两种字体样式

引言

在iOS开发中,UILabel是一个非常常用的界面元素。我们在现实应用中,可能需要在同一个UILabel中显示两种不同的字体样式,比如强调某个关键词或内容。本文将指导你如何实现这一功能,并详细说明每一步的操作。

实现流程

我们将在本文中按照以下步骤实现UILabel中显示两种字体样式:

步骤 描述
1 创建UILabel
2 创建NSMutableAttributedString
3 设置不同的字体样式
4 将attributedString赋值给UILabel
5 显示UILabel

步骤详解

1. 创建UILabel

首先,我们需要在你的视图控制器中创建UILabel。以下是创建UILabel的代码:

// 导入UIKit框架
import UIKit

// 创建UILabel
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false // 启用自动布局
label.numberOfLines = 0 // 允许多行显示

注释:

  • translatesAutoresizingMaskIntoConstraints 设为 false,表示我们将使用自动布局,而不是Autoresizing Mask。
  • numberOfLines 设为 0,允许UILabel能够显示多行文本。

2. 创建NSMutableAttributedString

一旦我们有了UILabel,我们就需要创建一个可以富文本显示的字符串——NSMutableAttributedString。代码如下:

// 创建字符串内容
let text = "Hello, this is a bold word!"

// 创建可变富文本字符串
let attributedString = NSMutableAttributedString(string: text)

注释:

  • NSMutableAttributedString 可以让我们添加不同的样式(如字体、颜色、间距等)。

3. 设置不同的字体样式

接下来,我们会设置字符串中某部分的字体样式,比如将“bold word”设置为粗体。代码如下:

// 设置范围
let boldRange = (text as NSString).range(of: "bold word")

// 设置字体样式
attributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: 16), range: boldRange)

注释:

  • range(of:) 方法用于获取需要设置样式的文本的范围。
  • addAttribute 是用于给指定范围内的字符串添加属性的函数。在这里,我们使用了 .font 属性,将指定范围的字体设置为系统粗体,大小为16。

4. 将attributedString赋值给UILabel

完成了字符串的样式设置之后,我们需要将这个attributedString赋值给我们的UILabel。代码如下:

// 将富文本字符串赋值给UILabel
label.attributedText = attributedString

注释:

  • attributedText 属性允许我们将一个富文本字符串显示在UILabel中。

5. 显示UILabel

最后,我们需要将UILabel添加到视图中并设置布局约束。代码如下:

// 将label添加到当前视图
view.addSubview(label)

// 设置布局约束
NSLayoutConstraint.activate([
    label.topAnchor.constraint(equalTo: view.topAnchor, constant: 100),
    label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
    label.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
])

注释:

  • addSubview 方法将UILabel添加到当前视图中。
  • NSLayoutConstraint.activate 用于激活多个约束,这里设置了UILabel在视图中的位置。

整理后的完整代码

将上述代码整合后,你的视图控制器的代码应如下所示:

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // 创建UILabel
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false // 启用自动布局
        label.numberOfLines = 0 // 允许多行显示

        // 创建字符串内容
        let text = "Hello, this is a bold word!"
        
        // 创建可变富文本字符串
        let attributedString = NSMutableAttributedString(string: text)
        
        // 设置范围
        let boldRange = (text as NSString).range(of: "bold word")
        
        // 设置字体样式
        attributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: 16), range: boldRange)
        
        // 将富文本字符串赋值给UILabel
        label.attributedText = attributedString

        // 将label添加到当前视图
        view.addSubview(label)

        // 设置布局约束
        NSLayoutConstraint.activate([
            label.topAnchor.constraint(equalTo: view.topAnchor, constant: 100),
            label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
            label.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
        ])
    }
}

旅行图

journey
    title 实现UILabel两种字体样式的旅程
    section 创建UILabel
      创建UILabel: 5: 开始
    section 创建NSMutableAttributedString
      创建可变字符串: 5: 进行中
    section 设置不同的字体样式
      设置字体样式: 4: 继续
    section 将attributedString赋值给UILabel
      更新UILabel内容: 3: 即将完成
    section 显示UILabel
      显示UILabel: 2: 完成

结尾

通过上述步骤,你成功地实现在一个UILabel中使用两种不同的字体样式。利用NSMutableAttributedString,你不仅可以改变字体的样式,还可以改变颜色、背景颜色和其他属性。在实际开发中,灵活运用这些技巧可以使你的应用界面更加生动和吸引用户。希望这篇文章对你有所帮助,祝你在iOS开发的旅程中越走越远!