Skip to content
DeveloperMemos

Resizing SF Symbols with SwiftUI

SwiftUI, SF Symbols, iOS Development2 min read

SF Symbols is a powerful icon set provided by Apple that allows developers to use a wide range of symbols in their iOS apps. These symbols are resizable vectors, making them perfect for various UI elements. In this article, we will explore how to resize SF Symbols using SwiftUI, enabling you to create visually appealing interfaces that adapt to different devices and screen sizes.

The Problem

By default, SF Symbols display at a size determined by the system font size. However, you may want to have more control over the size of these symbols to match the design requirements of your application. Let's dive into some examples of how to resize SF Symbols in SwiftUI.

Example 1: Resizing SF Symbols with the .font Modifier

The simplest way to resize an SF Symbol in SwiftUI is by using the .font modifier. You can pass a Font type or specify a size directly. Here's an example:

1import SwiftUI
2
3struct ContentView: View {
4 var body: some View {
5 Image(systemName: "heart.fill")
6 .font(.system(size: 24))
7 .foregroundColor(.red)
8 }
9}

In this example, we've created an Image view with the SF Symbol "heart.fill" and set its font size to 24 points. This results in a resized heart icon that is 24 points in size.

Example 2: Scaling SF Symbols with the .scaleEffect Modifier

Another approach to resizing SF Symbols is by using the .scaleEffect modifier. This modifier scales the symbol based on the provided scaling factor. Let's take a look at an example:

1import SwiftUI
2
3struct ContentView: View {
4 var body: some View {
5 Image(systemName: "star.fill")
6 .foregroundColor(.yellow)
7 .scaleEffect(2.0)
8 }
9}

In this example, we've created an Image view with the SF Symbol "star.fill" and applied a scale effect of 2.0. As a result, the star icon appears twice as large as its original size.

Example 3: Resizing SF Symbols with the .imageScale Modifier

The .imageScale modifier allows you to resize SF Symbols by specifying a predefined image scale. This modifier accepts a value from the Image.Scale enumeration. Here's an example:

1import SwiftUI
2
3struct ContentView: View {
4 var body: some View {
5 Image(systemName: "folder.fill")
6 .foregroundColor(.blue)
7 .imageScale(.large)
8 }
9}

In this example, we've used the .imageScale modifier with a value of .large, resulting in a larger-sized folder icon.

Example 4: Custom Resizing with GeometryReader

If you require more granular control over the size of your SF Symbols, you can use the GeometryReader view to provide custom sizing. This approach is particularly useful when you want symbols to adapt dynamically to different screen sizes or user interface layouts. Here's an example:

1import SwiftUI
2
3struct ContentView: View {
4 var body: some View {
5 GeometryReader { geometry in
6 Image(systemName: "arrow.right.circle.fill")
7 .font(Font.system(size: min(geometry.size.width, geometry.size.height) * 0.5))
8 .foregroundColor(.green)
9 }
10 }
11}

In this example, we've embedded the Image view within a GeometryReader. By using the geometry parameter, we calculate the minimum dimension of the available space and create a font size that is half of that value. This results in a dynamically resized arrow icon.


Resizing SF Symbols in SwiftUI allows you to customize the appearance of your iOS app's icons and improve the user interface. In this article, we covered various methods to resize SF Symbols, including using the .font modifier, the .scaleEffect modifier, the .imageScale modifier, and custom sizing with GeometryReader. Experiment with these techniques to achieve the desired visual effects in your SwiftUI projects.