Ios SwiftUI:当列表太长时,搜索栏将移出边界
我已经在我的应用程序中的自定义标题中实现了一个搜索栏。在搜索栏下方,我添加了一个包含100行的假Ios SwiftUI:当列表太长时,搜索栏将移出边界,ios,swiftui,Ios,Swiftui,我已经在我的应用程序中的自定义标题中实现了一个搜索栏。在搜索栏下方,我添加了一个包含100行的假列表,用于显示搜索结果 我面临的问题是: 当列表出现时,搜索栏将移出边界。当我添加400px的顶部填充时,搜索栏返回到边界 接下来的两个有点离题 当键盘在屏幕上时,列表的最后几行不可见。如何修复它 如何为列表设置背景色?我还没弄明白。(listRowBackground修饰符没有按照我读到的一篇文章的建议工作。) 我使用的是Xcode 12.0 beta 6 let screen = UISc
列表
,用于显示搜索结果
我面临的问题是:
- 当列表出现时,搜索栏将移出边界。当我添加400px的顶部填充时,搜索栏返回到边界李>
- 当键盘在屏幕上时,列表的最后几行不可见。如何修复它李>
- 如何为
?我还没弄明白。(listRowBackground修饰符没有按照我读到的一篇文章的建议工作。)列表设置背景色
let screen = UIScreen.main.bounds
struct SearchBarView: View {
@Binding var search: String
@Binding var searchSelected: Bool
var body: some View {
VStack {
CustomTextField(text: $search, isFirstResponder: true)
.modifier(SearchBarTextFieldStyle(search: $search))
if !search.isEmpty {
List(1..<100) { i in
Text("Hello \(i)")
}.frame(width: screen.width)
}
}
.frame(width: screen.width, height: !search.isEmpty ? screen.height : 40)
.background(Color("ThemeColor"))
}
}
let screen=UIScreen.main.bounds
结构SearchBarView:视图{
@绑定变量搜索:字符串
@所选绑定变量:Bool
var body:一些观点{
VStack{
CustomTextField(文本:$search,isFirstResponder:true)
.modifier(SearchBarTextFieldStyle(搜索:$search))
如果!search.isEmpty{
清单(1。。
当列表出现时,搜索栏将移出边界
顶部填充为400px,搜索栏返回边界
问题是所有内容都放在一个VStack
中。因此,当搜索不再为空时,TextField
与列表共享提供给它的空间
将TextField
放在一个单独的堆栈中,如下所示:
struct ContentView: View {
@State var search: String = ""
var body: some View {
// Everything wrapped in one Stack
VStack() {
// Separate Stack for the TextField
HStack() {
TextField("Title", text: self.$search)
}.padding()
// One Stack for the content
VStack {
if !search.isEmpty {
List(1..<100) { i in
Text("Hello \(i)")
}.frame(width: UIScreen.main.bounds.width)
}
}.frame(width: UIScreen.main.bounds.width)
.background(Color.red)
Spacer() // So that the TextField is also on top when no content is displayed
}
}
}
struct ContentView:View{
@状态变量搜索:String=“”
var body:一些观点{
//所有东西都包在一堆里
VStack(){
//TextField的单独堆栈
HStack(){
文本字段(“标题”,文本:self.$search)
}.padding()
//内容的一个堆栈
VStack{
如果!search.isEmpty{
列表(1..感谢您的回复。将文本字段
和列表
分开并不能解决问题,因为两者都有相同的父容器。但是,我做了一个变通,用键盘高度降低了父容器的高度(如您所建议的)并添加了一个间隔符
。这解决了两个问题,将搜索栏带到边界,并从列表中取消隐藏行。您为列表
背景色指向我的链接不适合我。可能是因为我无法很好地解释它,因为解决方案中没有给出任何解释。正如您在我的第一次访问中看到的示例TextField
和List
也共享一个父项。当没有List
时,Spacer
需要保持TextField
在顶部。我刚刚在代码的注释中编写了它,但没有提到它。我提供的代码在iOS 13.5.1下为我工作。但很高兴你能解决它嘿!很抱歉回复太晚:'(很遗憾,我的设备上没有使用iOS 13,因此我无法对此发表评论。在iOS 14中,它似乎不起作用。无论如何,感谢您的回答。非常感谢。
import SwiftUI
struct ContentView: View {
@State var search: String = ""
var body: some View {
VStack() {
HStack() {
TextField("Title", text: self.$search)
}.padding()
VStack {
if !search.isEmpty {
List(1..<100) { i in
Text("Hello \(i)")
}.frame(width: UIScreen.main.bounds.width)
.padding(.bottom, 300) // here padding
}
}.frame(width: UIScreen.main.bounds.width)
Spacer()
}
}
}