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)的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C依然占C位,Swift和SwiftUI在iOS 15中的使用情况

SwiftUI 和 iOS 15 中的新功能:LocationButton

iOS 15.3+ SwiftUI的Form视图中嵌入List及Button若干诡异行为的解决

SwiftUI 自定义选取器标签未呈现

无法更改 iOS 15 SwiftUI 列表部分标题填充

新的 SwiftUI/iOS 15.0 .animation 未按预期工作