SwiftUI中如何让SearchBar展开时覆盖下方视图而非向下挤压
SwiftUI 搜索框展开覆盖下层视图解决方案
你当前的布局问题根源是VStack会为内部所有元素分配独立的布局空间,搜索框高度变化时会自动撑开整体容器高度,挤压下方的RandomGameView。只需调整ZStack的层级顺序即可实现覆盖效果:
- 将
RandomGameView放到ZStack的下层,提前预留出搜索框收起状态的顶部高度,避免收起时被遮挡 - 将搜索框放到ZStack的上层,悬浮在顶部,展开时高度增加会自然向下覆盖下层内容
修改后的完整代码如下:
struct SearchView: View { @ObservedObject var allGames = SearchController() var body: some View { NavigationView{ ZStack(alignment: .top) { Color("Color").edgesIgnoringSafeArea(.all) // 下层放置随机游戏视图,顶部预留搜索栏高度,数值可根据实际样式调整 RandomGameView() .padding(.top, 60) // 上层放置搜索栏,层级更高,展开时自动覆盖下层内容 SearchBar(data: self.allGames.allGames) .padding(.top) } .navigationBarTitle("Search") .padding(.top, -20) } .navigationViewStyle(StackNavigationViewStyle()) .listStyle(PlainListStyle()) } }
如果需要避免硬编码顶部padding数值,可以配合GeometryReader动态读取搜索栏收起状态的高度,再赋值给下层视图的顶部padding,适配性更强。
你要实现的效果示意图如下:
内容的提问来源于stack exchange,提问作者Nicolaj Spiegelhauer
相关产品推荐
相关产品推荐

