ios - 带有 .Vertical axis going below keyboard 的多行文本字段

标签 ios swift swiftui scrollview textfield

我遇到一些问题,文本字段没有随 View 一起移动。

我正在使用带有垂直轴 (iOS 16) 的文本字段来创建多行。当它未嵌入 ScrollView 时,它可以正常工作并按预期保持在键盘上方。但是一旦文本字段嵌入到 ScrollView 中,多行就在键盘下方,您必须手动滚动才能看到最后一行。

请看下面的代码。这应该可以正常工作。但是,如果您删除 ScrollView ,您会在输入时注意到这个问题。

struct ContentView: View {
    @State private var text = "Lorem ipsum dolor sit amet. Nam voluptatem necessitatibus aut quis odio rem error repudiandae id aliquam perferendis et quidem quaerat et enim harum! Cum nesciunt animi rem quia vero aut omnis eligendi in ducimus eaque sit mollitia fugit est animi nesciunt. Ut exercitationem nulla qui dolor nihil ad autem vero quo internos sapiente eum dicta nihil qui exercitationem cumque et consectetur dolore. Et fugiat officiis non harum voluptas et modi repellendus ut repellat dolorem 33 eveniet quidem qui galisum veritatis. Id consequatur tenetur et eaque voluptas in assumenda delectus et fuga praesentium rem provident delectus est necessitatibus sunt quo dignissimos dolorum. Et reiciendis error et rerum eligendi qui illum error? In soluta ipsum est molestiae pariatur hic voluptas animi qui cupiditate amet."
    
    var body: some View {
        
        ScrollView {
            VStack() {
                TextField("Enter something", text: $text, axis: .vertical)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
            }
        }
    }
}

如果您知道任何 GitHub 存储库,那也很好。

更新: 我找到了解决方案,并将在未来几天内发布。

最佳答案

这不是一个确定的答案。在模拟器中出现了一些错误行为。尝试一下并在真实设备上查看(我这里没有)。

import SwiftUI

struct ContentView: View {
    
    @State private var text = "Lorem ipsum dolor sit amet. Nam voluptatem necessitatibus aut quis odio rem error repudiandae id aliquam perferendis et quidem quaerat et enim harum! Cum nesciunt animi rem quia vero aut omnis eligendi in ducimus eaque sit mollitia fugit est animi nesciunt. Ut exercitationem nulla qui dolor nihil ad autem vero quo internos sapiente eum dicta nihil qui exercitationem cumque et consectetur dolore. Et fugiat officiis non harum voluptas et modi repellendus ut repellat dolorem 33 eveniet quidem qui galisum veritatis. Id consequatur tenetur et eaque voluptas in assumenda delectus et fuga praesentium rem provident delectus est necessitatibus sunt quo dignissimos dolorum. Et reiciendis error et rerum eligendi qui illum error? In soluta ipsum est molestiae pariatur hic voluptas animi qui cupiditate amet."
    
    @Namespace var bottomText
    
    var body: some View {
        ScrollViewReader { proxy in
            ScrollView {
                Text("Title")
                    .font(.largeTitle)
                TextField("Enter something", text: $text, axis: .vertical)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .onChange(of: text) { newValue in
                        print("Fired.")
                        withAnimation {
                            proxy.scrollTo(bottomText, anchor: .center)
                        }
                    }
                Color.red.frame(height: 50).id(bottomText)
            }
            
        }
    }
}

关于ios - 带有 .Vertical axis going below keyboard 的多行文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74345451/

相关文章:

android - ios opengl es 在干净的 C 上渲染纹理

python - 来自 Socket.IO-Client-Swift 的 Socket.io POST 请求

ios - 苹果 watch NFC API

ios - 在 SwiftUI 中使用包装的 UIKit 选项卡 View 在按钮按下时切换选项卡

swiftui - 如何使用 SwiftUI 每秒刷新一次 View

swift - any Identifiable 不能符合 'Identifiable'

ios - 尝试对地址进行地理编码时出现异常

iphone - UIScrollView 作为 UIViewController 的 View 并设置背景图片

swift - 如何在 map 上添加 2 个不同的图钉? - swift

ios - 如何从服务器URL下载zip文件并提取zip文件保存到ios swift中的本地目录?