詳解如何在SwiftUI中創(chuàng)建懸浮操作按鈕
前言
懸浮操作按鈕(Floating Action Button, FAB)是一種在 Android 和 Material Design 中使用的 UI 元素。它用于觸發(fā)特定屏幕的主要操作。
盡管它來(lái)自 Android,但在一些 iOS 應(yīng)用中也可以看到這種模式。
以下是 Twitter 應(yīng)用中懸浮操作按鈕的示例。Twitter App 在最重要的操作步驟,發(fā)布推文時(shí)使用懸浮操作按鈕。如下圖,在右下角有一個(gè)藍(lán)底中間有加號(hào)的按鈕。

下面我們就來(lái)詳細(xì)介紹一下還如何實(shí)現(xiàn)這個(gè)懸浮按鈕需求。
創(chuàng)建懸浮操作按鈕
如何 SwiftUI 創(chuàng)建一個(gè)類似 Twitter App 中的懸浮按鈕。
實(shí)現(xiàn)懸浮操作按鈕可能有很多方法,下面是我要實(shí)現(xiàn)按鈕的一些簡(jiǎn)單需求,如下:
- 懸浮按鈕應(yīng)該出現(xiàn)在屏幕的主要內(nèi)容前面。
- 懸浮按鈕位于屏幕的右下角。
- 懸浮按鈕具有圓角形狀,并在中心具有一個(gè)圖標(biāo)。
- 懸浮按鈕帶有一個(gè)輕微的陰影。
這是要實(shí)現(xiàn)懸浮按鈕的所有行為。讓我們逐步實(shí)現(xiàn)這些需求。
在此之前,需要先創(chuàng)建并初始化一個(gè)屏幕用來(lái)承載這個(gè)懸浮按鈕。
以下是一個(gè)簡(jiǎn)單的列表視圖,嵌套在導(dǎo)航視圖和選項(xiàng)卡視圖中,列表中顯示了 item 加索引內(nèi)容。
并在菜單欄中添加了 Home 按鈕和圖標(biāo),核心代碼如下:
struct ContentView: View {
var body: some View {
TabView {
NavigationStack {
List(0..<100) { i in
Text("Item \(i)")
}
.navigationTitle("Home")
}
.tabItem {
Label("Home", systemImage: "house")
}
}
}
}
示例運(yùn)行截圖如下:

懸浮按鈕出現(xiàn)在屏幕的最前方
首先,是需要實(shí)現(xiàn)需求中的第一步,懸浮按鈕應(yīng)該出現(xiàn)在屏幕的主要內(nèi)容前面。
要使視圖出現(xiàn)在另一個(gè)視圖前面,可以使用 ZStack 或 overlay 修飾符。
在這種情況下,選擇使用 ZStack,核心代碼如下:
struct ContentView: View {
var body: some View {
TabView {
NavigationStack {
// 1
ZStack {
List(0..<100) { i in
Text("Item \(i)")
}
.navigationTitle("Home")
// 2
Button {
// 操作
} label: {
Image(systemName: "plus")
}
}
}
.tabItem {
Label("Home", systemImage: "house")
}
}
}
}
將內(nèi)容視圖(List)包裝在 ZStack 中。將一個(gè)按鈕放在內(nèi)容視圖上。
這將在列表視圖上添加一個(gè)加號(hào)圖像按鈕。
示例運(yùn)行截圖如下:

懸浮按鈕位于屏幕的右下角
接著,是需要實(shí)現(xiàn)需求中的第二步,使按鈕與內(nèi)容視圖對(duì)齊到右下角。
這里可以在代碼中使用 ZStack 的 alignment 參數(shù)將按鈕與右下角對(duì)齊,核心代碼如下:
struct ContentView: View {
var body: some View {
TabView {
NavigationStack {
// 1
ZStack(alignment: .bottomTrailing) {
List(0..<100) { i in
Text("Item \(i)")
}
.navigationTitle("Home")
Button {
// 操作
} label: {
Image(systemName: "plus")
}
// 2
.padding()
}
}
.tabItem {
Label("Home", systemImage: "house")
}
}
}
}
ZStack(alignment: .bottomTrailing)使較小的視圖(Button)與較大的視圖(List)底部右對(duì)齊。- 我們還在按鈕周圍添加了填充,以使其不會(huì)過(guò)于靠近邊緣。
示例運(yùn)行截圖如下:

使懸浮按鈕呈現(xiàn)圓形
接著,是需要實(shí)現(xiàn)需求中的第三步,使懸浮按鈕具有圓角形狀,并在中心具有一個(gè)圖標(biāo)。
目前的情況位置是正確的,但外觀還不符合要求。
可以使用一系列修飾符使其變成圓形并加粗,核心代碼如下:
struct ContentView: View {
var body: some View {
TabView {
NavigationStack {
ZStack(alignment: .bottomTrailing) {
List(0..<100) { i in
Text("Item \(i)")
}
.navigationTitle("Home")
Button {
// 操作
} label: {
// 1
Image(systemName: "plus")
.font(.title.weight(.semibold))
.padding()
.background(Color.pink)
.foregroundColor(.white)
.clipShape(Circle())
}
.padding()
}
}
.tabItem {
Label("Home", systemImage: "house")
}
}
}
}
- 更改了字體樣式,添加了填充,背景色和前景色,并將其裁剪成圓形。

添加陰影
最后,是需要實(shí)現(xiàn)需求中的第四步,使懸浮按鈕帶有一個(gè)輕微的陰影。
我們通過(guò)添加陰影為其增色,使其看起來(lái)像懸浮。
SwiftUI 通過(guò) shadow 修飾符內(nèi)置了添加陰影的方法,核心代碼如下:
struct ContentView: View {
var body: some View {
TabView {
NavigationStack {
ZStack(alignment: .bottomTrailing) {
List(0..<100) { i in
Text("Item \(i)")
}
.navigationTitle("Home")
Button {
// 操作
} label: {
Image(systemName: "plus")
.font(.title.weight(.semibold))
.padding()
.background(Color.pink)
.foregroundColor(.white)
.clipShape(Circle())
.shadow(radius: 4, x: 0, y: 4)
}
.padding()
}
}
.tabItem {
Label("Home", systemImage: "house")
}
}
}
}
示例運(yùn)行截圖如下:

這就是在 SwiftUI 中創(chuàng)建懸浮操作按鈕所需的全部步驟。
總結(jié)
在本文中,我們學(xué)習(xí)了如何在 SwiftUI 中創(chuàng)建一個(gè)懸浮操作按鈕,它是 Android 和 Material Design 中常用的 UI 元素。通過(guò)逐步實(shí)現(xiàn)懸浮按鈕的各個(gè)特性來(lái)完成這個(gè)過(guò)程。
希望本文的內(nèi)容對(duì)你在 SwiftUI 開發(fā)中有所幫助,能夠輕松地實(shí)現(xiàn)漂亮的懸浮操作按鈕,增強(qiáng)應(yīng)用界面和用戶交互體驗(yàn)。
以上就是詳解如何在SwiftUI中創(chuàng)建懸浮操作按鈕的詳細(xì)內(nèi)容,更多關(guān)于SwiftUI創(chuàng)建懸浮操作按鈕的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
EvenLoop模型在iOS的RunLoop應(yīng)用示例
這篇文章主要為大家介紹了EvenLoop模型在iOS的RunLoop應(yīng)用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
在一個(gè)項(xiàng)目中同時(shí)使用Swift和Objective-C代碼混合編程的方法
這篇文章主要介紹了在一個(gè)項(xiàng)目中同時(shí)使用Swift和Objective-C代碼的方法,在一個(gè)工程中同時(shí)使用Swift和Objective-C混合語(yǔ)言編程的方法,需要的朋友可以參考下2014-07-07
用SwiftUI實(shí)現(xiàn)3D Scroll滾動(dòng)效果的實(shí)現(xiàn)代碼
這篇文章主要介紹了用SwiftUI實(shí)現(xiàn)3D Scroll效果的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)2020-04-04
關(guān)于Swift 4.1中的Codable改進(jìn)詳解
這篇文章主要給大家介紹了關(guān)于Swift 4.1中的Codable改進(jìn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02
Swift3遷移至Swift4可能遇到的問(wèn)題小結(jié)
每當(dāng)看到新的編程語(yǔ)言我總是會(huì)有相當(dāng)大的興趣,所以下面這篇文章主要給大家介紹了關(guān)于Swift3遷移至Swift4可能遇到的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
SwiftUI?引導(dǎo)頁(yè)界面實(shí)現(xiàn)示例
這篇文章主要為大家介紹了SwiftUI?引導(dǎo)頁(yè)界面實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

