【发布时间】:2020-01-05 22:00:54
【问题描述】:
我正在像这样设置leading 和trailing navigationBarItems
.navigationBarItems(leading: SearchBar(text: $searchText), trailing: rightTopBarItems())
trailing 项目显示正常,但 SearchBar 不出现。是否可以将UIViewRepresentable 添加为navigationBarItem?我在文档中找不到任何内容。
搜索条码:
import SwiftUI
struct SearchBar: UIViewRepresentable {
@Binding var text: String
class Coordinator: NSObject, UISearchBarDelegate {
@Binding var text: String
init(text: Binding<String>) {
_text = text
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
text = searchText
}
}
func makeCoordinator() -> SearchBar.Coordinator {
return Coordinator(text: $text)
}
func makeUIView(context: UIViewRepresentableContext<SearchBar>) -> UISearchBar {
let searchBar = UISearchBar(frame: .zero)
searchBar.delegate = context.coordinator
searchBar.autocapitalizationType = .none
searchBar.searchBarStyle = UISearchBar.Style.minimal
return searchBar
}
func updateUIView(_ uiView: UISearchBar, context: UIViewRepresentableContext<SearchBar>) {
uiView.text = text
}
}
【问题讨论】:
-
根据我的发现,它现在可以正常工作,仅在
VStack下List内 -
你的意思是我应该试试 VStack { List { SearchBar(text: $searchText) } }?这没有任何区别。
-
不,我用
VStack { SearchBar(text: $searchText) List { } } -
这不会编译,因为 List 必须返回一些东西。我将其更改为 VStack { SearchBar(text: $searchText) List { EmptyView() } } 但这仍然不起作用。
标签: swiftui