gpt4 book ai didi

SwiftUI TextField 采用最大宽度

转载 作者:行者123 更新时间:2023-12-04 11:23:43 26 4
gpt4 key购买 nike

我有一个导航列表,每个列表项都采用以下格式:

HStack {
TextField("Insert something here.",text: self.$userData.pages[i].title)
.border(Color.blue)
Spacer()
}

这导致以下 View :

The touchable area is highlighted by the blue border and it takes the whole width of the row

这样做的问题是,尽管列表项是一个导航链接,但用户单击该项目的任意位置将导致他们编辑文本内容。我更喜欢的是 TextFieldText 具有相同的宽度:

The blue border wraps the text instead of taking the max width

所以如果用户在 TextField 之外点击,导航有效,但如果他们点击文本,它将让他们编辑文本。 (以上 View 带有 Text 字段)。

如果我问了一个不清楚或不好的问题,我深表歉意。我是 Stack Overflow 和 SwiftUI 的新手。

编辑:

我试过使用 fixedSize修饰符,并且 TextField 正确包装了我的文本,但现在导航链接不起作用(即单击它不会导航)。这是我的完整代码:
NavigationLink(destination: PageView(page: self.userData.pages[i])) {
HStack {
Button(action: {}){
TextField(" ", text: self.$userData.pages[i].title)
.fixedSize()

}
.buttonStyle(MyButtonStyle())
.border(Color.blue)
Spacer()
}
}

最佳答案

不用道歉,你的问题很清楚。
您可以使用 fixedSize() 来做到这一点。

所以你的代码应该是这样的

HStack {
TextField("Insert something here.",text: self.$userData.pages[i].title)
.border(Color.blue)
.fixedSize()
Spacer()
}

您可以进一步指定您希望拉伸(stretch)的方式,或者 verticalhorizontal甚至两者都通过像这样传递参数 .fixedSize(horizontal: true, vertical: false)
更新答案以满足您的新要求
import SwiftUI

struct StackOverflow5: View {
@State var text: String = ""
@State var selection: Int? = nil

var body: some View {
NavigationView {
ZStack {
NavigationLink(destination: Page2(), tag: 1, selection:self.$selection) {
Color.clear
.onTapGesture {
self.selection = 1
}
}


TextField("Text", text: self.$text)
.fixedSize()
}
}
}
}

struct StackOverflow5_Previews: PreviewProvider {
static var previews: some View {
StackOverflow5()
}
}

struct Page2: View {
var body: some View {
Text("Page2")
}
}


我们使用了 ZStack在这里分隔我们的 TextField和我们的 NavigationLink因此它们可以单独交互。

注意使用 Color.clear在我们之前 TextField这是故意的,以便我们的 TextField有交互优先级。我们还使用了 Color.clear,因为它会作为背景拉伸(stretch),它是 clear所以它不可见。

显然我硬编码 1在这里,但这可以来自 ListForEach
此外,如果您不想使用 selectiontag你可以做这样的事情
...
@State var isActive: Bool = false
...
NavigationLink(destination: Page2(), isActive: self.$isActive) {
Color.clear
.onTapGesture {
self.isActive.toggle()
}
}
....

关于SwiftUI TextField 采用最大宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62309537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com