SwiftUI自定义TabView弹出键盘时无法固定在底部如何解决?
自定义TabBar随键盘上移修复方案
问题原因
iOS系统键盘弹出时会自动抬高当前页面的底部安全区域,你将自定义TabBar放在ZStack的底部对齐位置,就会跟随抬高后的安全区同步上移。你需要的页面内容(输入框等)随键盘上移是正常的安全区域适配行为,只需要单独让TabBar忽略键盘带来的安全区域变动即可。
修复代码
只需要在MainView里的CustomTabBar视图上添加ignoresSafeArea修饰符,指定忽略键盘类型的底部安全区域即可,修改后的MainView相关代码如下:
import SwiftUI struct MainView: View { @State var currentTab : Tab = .Home init() { UITabBar.appearance().isHidden = true } @Namespace var animation var body: some View { ZStack(alignment: .bottom) { TabView(selection: $currentTab) { HomeView() .tag(Tab.Home) SearchView() .tag(Tab.Search) MessagesView() .tag(Tab.Messages) SettingsView() .tag(Tab.Settings) } // 仅对CustomTabBar添加忽略键盘安全区的修饰符 CustomTabBar(animation: animation, currentTab: $currentTab) .ignoresSafeArea(.keyboard, edges: .bottom) } } } enum Tab: String, CaseIterable { case Home = "Home" case Search = "Search" case Messages = "Messages" case Settings = "Settings" } struct MainView_Previews: PreviewProvider { static var previews: some View { MainView() } }
补充说明
这个修改不会影响TabView内的页面内容适配逻辑,输入框唤起键盘时页面内容还是会正常上移,仅TabBar会固定在屏幕底部。如果你的项目需要兼容iOS14及更低版本,可以将修饰符替换为.edgesIgnoringSafeArea(.bottom),效果一致。
问题示意:
内容的提问来源于stack exchange,提问作者Gurmukh Singh
相关产品推荐
相关产品推荐

