SwiftUI 中如何设置 SF Symbol 的尺寸

iOS 中自带的 SF Symbol 数量已经超过了 5000 个,一些常见的符号在日常开发中还是相当好用的。使用SF Symbol 一定会遇到设置尺寸的问题。本文将介绍三种常见设置 SF symbol 大小的方法。

设置 font

因为SF symbol 作为矢量图标,实现上和字体一致。因此可以通过设置字体的方式来设置大小。通过字体的 size 和 weight 来调整图标的大小和粗细。

swift 复制代码
HStack {
    Image(systemName: "checkmark")
        .font(.system(size: 30, weight: .regular))
    Image(systemName: "checkmark")
        .font(.system(size: 25, weight: .regular))
    Image(systemName: "checkmark")
        .font(.system(size: 25, weight: .medium))
    Image(systemName: "checkmark")
        .font(.system(size: 25, weight: .bold))
}

设置 frame

因为 SF symbol 通过 Image 来显示,因此也可以通过控制图像的思路来调整大小:标记为 resizeable 通过设置 frame 让图案来填满容器。

swift 复制代码
HStack {
    Image(systemName: "checkmark")
        .frame(width: 20, height: 20)
    
    Image(systemName: "checkmark")
        .resizable()
        .scaledToFit()
        .frame(width: 20, height: 20)
    
    Image(systemName: "checkmark")
        .resizable()
        .scaledToFit()
        .frame(width: 25, height: 25)
    
    Image(systemName: "checkmark")
        .resizable()
        .scaledToFit()
        .frame(width: 30, height: 30)
}

特别要提醒的是记得要先将 Image 标记为 **resizable。**否则虽然容器变大了,但是容器的内容图标不会变大。这是 Image 控件的通用特性。

上图中虽然 frame 都是 40 x 40,但是第一个因为没有标记为 **resizable,**因此只是容器尺寸变大,内容大小不会跟随 frame 变化。

swift 复制代码
HStack {
    Image(systemName: "checkmark")
        .frame(width: 40, height: 40)
        .background {
            RoundedRectangle(cornerRadius: 2)
                .fill(AppColor.gray0)
        }
        
    Image(systemName: "checkmark")
        .resizable()
        .scaledToFit()
        .frame(width: 40, height: 40)
        .background {
            RoundedRectangle(cornerRadius: 2)
                .fill(AppColor.gray0)
        }
}

设置 scale

Image 控件还有很便捷的 func imageScale(_ scale: Image.Scale) ,如果只是简单的按照原始标准大小进行微调,可以使用这个方法。但是 scale 只有 small、medium、large 三档:

swift 复制代码
HStack {
    Image(systemName: "heart.fill")
        .imageScale(.small)
    Image(systemName: "heart.fill")
        .imageScale(.medium)
    Image(systemName: "heart.fill")
        .imageScale(.large)
}

史上最全的SF Symbols 使用指南

How do I set the size of a SF Symbol in SwiftUI

相关推荐
东坡肘子18 小时前
当应用不再属于特定操作系统 -- 肘子的 Swift 周报 #159
人工智能·swiftui·swift
东坡肘子8 天前
谁是 AI-relay App 的真正威胁 -- 肘子的 Swift 周报 #158
人工智能·swiftui·swift
东坡肘子15 天前
当 Build in Public 重新转入地下 -- 肘子的 Swift 周报 #157
人工智能·swiftui·swift
OliverQiu15 天前
开源一个 macOS 小工具:集中管理 ChatGPT 的网络启动配置
macos·chatgpt·swiftui·mac·proxy·codex·dmg
传奇开心果编程19 天前
【SwiftUI提高练中学】第9课 安全与隐私
swiftui·移动开发·swift·编程语言理论·开发范式·编程框架·声明式ui
传奇开心果编程20 天前
【声明式UI开发实用技术学与练】第8课 状态提升与下放
学习·flutter·react native·ui·swiftui·composer
东坡肘子20 天前
Swift Server,又多了一个 Google -- 肘子的 Swift 周报 #156
人工智能·swiftui·swift
传奇开心果编程21 天前
【现代声明式UI学与练】第4课 列表渲染与 key——如何高效渲染列表、key 的作用、列表重排时的状态保持
学习·flutter·react native·ui·swiftui·android jetpack
传奇开心果编程21 天前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
传奇开心果编程21 天前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack