iOS 17 上 FocusState 的不同行为

问题描述 投票:0回答:1

我在向应用程序添加一个字段时遇到问题,用户可以在其中输入格式化文本,并且能够在聚焦时将其删除。

有趣的是,该应用程序在 iOS 17 上运行正常,并且在键入时按“x 按钮”会删除文本。然而,在较低的 iOS 版本上,什么也没有发生,文本也不会消失。

第一个 gif (iOS 15.5) 第二个 (iOS 17.2) 这是我的代码。

import SwiftUI

struct ContentView: View {
    @FocusState var isFocused: Bool
    
    @State var text = 0
    var body: some View {
        VStack {
            HStack {
                TextField("write text here...",
                          value: $text,
                          format: .number)
                .focused($isFocused)
                .keyboardType(.numberPad)
                
                if isFocused {
                    Button("",
                           systemImage: "xmark.circle.fill") {
                        text = 0
                    }
                }
            }
            .border(.black)
        }
        .padding()
    }
}

有谁知道发生了什么事以及如何使该应用程序像在 17 上那样在所有 iOS 版本上运行?

swift swiftui focus
1个回答
0
投票

我不明白 17 之前的 iOS 上发生了什么... isFocused 属性在任何版本的操作系统上始终为 true。我设法让它工作的唯一方法是这个,这确实是一个解决方法:

VStack {
            HStack {
                TextField("write text here...",
                          value: $text,
                          format: .number)
                .focused($isFocused)
                .keyboardType(.numberPad)
                .overlay(alignment: .trailing) {
                    Button("", systemImage: "xmark.circle.fill") {
                        if #available(iOS 17, *) {
                            text = 0
                            return
                        }
                        isFocused.toggle()
                        DispatchQueue.main.asyncAfter(deadline: .now() + 0.001) {
                            text = 0
                            isFocused.toggle()
                        }
                    }
                    .opacity(isFocused ? 1 : 0)
                    .disabled(!isFocused)
                }
            }
            .border(.black)
        }
        .padding()

我还使用覆盖层改进了布局以显示 X 按钮和不透明度并禁用修改器以避免显示它并与之交互。 这种行为也可能是旧操作系统版本上的错误。 让我知道该解决方案是否适合您!

© www.soinside.com 2019 - 2024. All rights reserved.