swift - SwiftUI TextField 采用最大宽度
问题描述
我有一个导航列表,每个列表项都采用这种格式:
HStack {
TextField("Insert something here.",text: self.$userData.pages[i].title)
.border(Color.blue)
Spacer()
}
这导致以下视图:
这样做的问题是,尽管列表项是导航链接,但用户单击项目的任何位置都会导致他们编辑文本内容。我更喜欢的是与 aTextField
具有相同宽度的 a Text
:
因此,如果用户在 外部单击TextField
,导航将起作用,但如果他们单击文本,它将让他们编辑文本。(上面的视图是带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()
}
您可以通过像这样传递参数来进一步指定您希望拉伸的方式,vertical
或者horizontal
甚至两者
.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
这里使用 a 来分隔 ourTextField
和 our NavigationLink
,以便它们可以单独交互。
注意Color.clear
before our的使用,TextField
这是故意的,以便我们TextField
具有交互优先级。我们还使用了 Color.clear ,因为它会作为背景拉伸并且它clear
是不可见的。
显然我在这里硬编码1
,但这可以来自List
或ForEach
此外,如果你不想使用selection
,tag
你可以做这样的事情
...
@State var isActive: Bool = false
...
NavigationLink(destination: Page2(), isActive: self.$isActive) {
Color.clear
.onTapGesture {
self.isActive.toggle()
}
}
....
推荐阅读
- javascript - 动态拆分数组元素
- python - 烧瓶运行错误:无法导入“App”和“App.py”
- groovy - 在groovy中减去枚举元素
- javascript - 当我启动节点 server.js 发生这种情况
- flutter - 当我尝试将一个列表分配给一个列表时,为什么 .add() 方法不起作用
- javascript - 从 Chrome 获取包含更改的 PDF
- javascript - 将对象数组变成有组织的对象 - javascript
- python - Python在离散数据上查找局部最大值和最小值
- python - 如何让这段代码更快地找到大数的自然除数?
- c++ - (no match for operator[])//C++ 在我尝试在我的函数上使用数组时向我显示该错误