SwiftUI 弹出键盘不影响布局

关于我:大厂摸鱼 + 业余独立开发,之后会输出深度技术文章 + 独立开发技巧

我的往期技术文章合集:RickeyBoy - Gitbub

我的独立开发 App:iColors - 设计灵感 配色助手

今天来讲一个简单又实用的细节,如何在 SwiftUI 中避免因为键盘弹起,而影响页面布局的方法。

实现效果

就以我的独立 App 中的一个场景为例:在自制色卡后,需要给色卡命名,这时需要弹起键盘

优化前 优化后
键盘弹起后,背景布局受影响 键盘弹起后,不影响其他布局

实现方案

先看看原本的布局代码,非常简单的一个 VStack 结构

Swift 复制代码
VStack() {
    ImageContent() // 中央核心内容
}

想要避免键盘弹起影响布局,需要使用 .ignoresSafeArea(.keyboard, edges: .bottom),当然,需要添加到 VStack 的外层:

Swift 复制代码
VStack() {
    ImageContent() // 中央核心内容
}
.ignoresSafeArea(.keyboard, edges: .bottom)

不过这种情况下测试,发现并没有修复原有的问题。经过调查发现,除了使用 ignoresSafeArea(.keyboard) 之外,还需要确保目标视图占据全屏!

比如,下面这样利用 Spacer,就可以了:

Swift 复制代码
// 方法 1:通过 Spacer() 撑满全屏
VStack() {
    Spacer()
    ImageContent() // 中央核心内容
    Spacer()
}
.ignoresSafeArea(.keyboard, edges: .bottom)

还有一种更巧妙一点的方法,使用 GeometryReader,这样可以避免需要添加 Spacer 而造成的布局调整

Swift 复制代码
// 方法 2:利用 GeometryReader 包裹一层
GeometryReader { _ in
  VStack() {
      ImageContent() // 中央核心内容
  }
}
.ignoresSafeArea(.keyboard, edges: .bottom)
相关推荐
for_ever_love__1 天前
UI学习:UICollectionView瀑布流
学习·ui·ios·objective-c·cocoa
大熊猫侯佩1 天前
WWDC26 全网首发:SwiftUI 8 “可重排序“操作符深度解析
ios·swiftui·swift
邓小乐1 天前
Workaround: Xcode27 下载iOS 27.0 Simulator
ios·xcode
韩曙亮1 天前
【Flutter】Flutter 中的 Android / iOS 特殊配置 ① ( 网络权限配置 | HTTP 明文传输配置 | 应用名称配置 )
android·网络·flutter·http·ios·网络权限
人月神话-Lee1 天前
【图像处理】颜色空间——RGB之外的世界
图像处理·人工智能·ios·ai编程·swift·rgb·颜色空间
东坡肘子1 天前
WWDC 2026 初印象:符合预期,但更务实 -- 肘子的 Swift 周报 #139
人工智能·swiftui·swift
CocoaKier1 天前
苹果后台年龄分级填写错误,可能导致审核被拒!
ios·apple
月诸清酒1 天前
Codex 现在能在浏览器里跑 iOS 模拟器了
ios
武子康1 天前
调查研究-159 Apple WWDC 2026 定档 6/8-12:Siri 与 AI 升级,可能是苹果最关键的一次
人工智能·深度学习·ios·ai·chatgpt·apple·wwdc