use*_*882 5 swift swiftui swiftui-navigationlink
我有一个导航列表,每个列表项都采用以下格式:
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")
    }
}
我们使用了ZStackhere 来分隔我们TextField和我们的,NavigationLink以便它们可以单独交互。
请注意使用Color.clearbefore ourTextField和 this 是故意的,以便我们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()
          }
}
....
| 归档时间: | 
 | 
| 查看次数: | 2608 次 | 
| 最近记录: |