SwiftUI 获取 TextField 或任何视图的坐标
Posted
技术标签:
【中文标题】SwiftUI 获取 TextField 或任何视图的坐标【英文标题】:SwiftUI Get Coordinates of TextField or any View 【发布时间】:2020-04-22 00:39:44 【问题描述】:我正在努力在 SwiftUI 中找到一种方法来获取 a 原点的 x,y 坐标 TextField(或任何视图)。我当然可以提供一个位置或偏移量来移动视图 但我似乎无法找到一种方法来获取对 TextField 的引用以获取它 坐标。
在 UIKit 中,我相信我会使用 myTextField.frame.origin.x
这是一个非常简单的例子:
struct ContentView: View
@State private var someNumber1 = "1000"
@State private var someNumber2 = "2000"
//bunch more
@State private var enteredNumber = "Some Text at the Top"
@State var value: CGFloat = 0
var body: some View
ScrollView
VStack
Spacer()
Text("\(enteredNumber)")
Spacer()
Group //1
TextField("Placeholder", text: $someNumber1)
.keyboardType(.default)
.textFieldStyle(RoundedBorderTextFieldStyle())
//this does not work
.onTapGesture
let aY = (textfieldreferencehere).frame.origin.y
TextField("Placeholder", text: $someNumber2)
.keyboardType(.default)
.textFieldStyle(RoundedBorderTextFieldStyle())
//group 1
//bunch more
Button(action:
self.enteredNumber = self.someNumber1
self.someNumber1 = ""
UIApplication.shared.endEditing()
)
Text("Submit")
.padding(.bottom, 50)
//outer v
.padding(.horizontal, 16)
.padding(.top, 44)
//Scrollview or Form
.modifier(AdaptsToSoftwareKeyboard())
任何指导将不胜感激。 Xcode 11.4.1
【问题讨论】:
【参考方案1】:这是一个如何读取特定视图坐标的演示(请参阅有用的 cmets inline)
struct DemoReadViewOrigin: View
@State private var someNumber1 = "1000"
@State private var someNumber2 = "2000"
//bunch more
@State private var enteredNumber = "Some Text at the Top"
@State var value: CGFloat = 0
var body: some View
ScrollView
VStack
Spacer()
Text("\(enteredNumber)")
Spacer()
Group //1
TextField("Placeholder", text: $someNumber1)
.keyboardType(.default)
.textFieldStyle(RoundedBorderTextFieldStyle())
.background(GeometryReader gp -> Color in
let rect = gp.frame(in: .named("OuterV")) // < in specific container
// let rect = gp.frame(in: .global) // < in window
// let rect = gp.frame(in: .local) // < own bounds
print("Origin: \(rect.origin)")
return Color.clear
)
//this does not work
.onTapGesture
TextField("Placeholder", text: $someNumber2)
.keyboardType(.default)
.textFieldStyle(RoundedBorderTextFieldStyle())
//group 1
//bunch more
Button(action:
self.enteredNumber = self.someNumber1
self.someNumber1 = ""
// UIApplication.shared.endEditing()
)
Text("Submit")
.padding(.bottom, 50)
//outer v
.coordinateSpace(name: "OuterV") // << declare coord space
.padding(.horizontal, 16)
.padding(.top, 44)
//Scrollview or Form
// .modifier(AdaptsToSoftwareKeyboard())
【讨论】:
这是一个非常好的解决方案,因为它不依赖于偏好键(就像其他类似主题的解决方案一样),而且使用基本的 Swift/SwiftUI 概念,因此希望破坏的可能性非常低。感谢分享以上是关于SwiftUI 获取 TextField 或任何视图的坐标的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUi 有没有办法在 TextField 中获取文本
SwiftUI 如何获取对 List 内编辑 Textfield 的参考?
_PathPoint 类和 _PointQueue 类错误,不使用任何 pod。只需点击swiftui中的textField?