iOS 15 中的 SwiftUI .searchable - .navigationBarDrawer(displayMode: .always)

Posted

技术标签:

【中文标题】iOS 15 中的 SwiftUI .searchable - .navigationBarDrawer(displayMode: .always)【英文标题】:SwiftUI .searchable in iOS 15 - .navigationBarDrawer(displayMode: .always) 【发布时间】:2021-06-27 16:30:37 【问题描述】:

我想使用新的 .searchable 修饰符和 .navigationBarDrawer(displayMode: .always) 来实现搜索栏。但是如果我启动应用程序,搜索栏的默认位置已经“滚动”了。

但这是我在App启动时想要实现的:

这是我的代码:

struct SearchView: View 
    @State var searchText = ""
    var body: some View 
        NavigationView 
            List 
                Text("Search Bar")
            
            .navigationBarTitle("Search")
            .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
        
    

【问题讨论】:

【参考方案1】:

Hacky 解决方案,但它有效:

struct ContentView: View 
@State var searchText = ""
var body: some View 
    NavigationView 
        ZStack 
            Rectangle()
                .fill(Color.white)
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 1)
            
            List 
                Text("Search Bar")
            
        
        .searchable(text: $searchText, placement:.navigationBarDrawer(displayMode: .always))
        
        .navigationBarTitle("Search", displayMode: .large)
    

【讨论】:

感谢您的回答!不幸的是,导航栏标题在滚动时不再变为内联。 @XÆA-12 您现在可以查看我已经更新了答案。最初,我以为你一直想要一个大标题。 很好,完美运行。虽然它有点 hacky :) 你知道这是苹果故意还是只是一个错误? 它只有在你添加 searchable(text: 到它时才会发生。所以它故意在那里是有原因的,但不知道它是什么。:)

以上是关于iOS 15 中的 SwiftUI .searchable - .navigationBarDrawer(displayMode: .always)的主要内容,如果未能解决你的问题,请参考以下文章