0

私はswiftUIが初めてです。そして、このようなフローティング ラベルの TextFeild が必要です。MatchedGeometryEffect() で試してみましたが、十分ではありませんでした。何がバグなのかわからない。アニメーションなしで完璧に機能しています。

ここに画像の説明を入力

アニメーションを追加すると、このように悪化します

ここに画像の説明を入力

これは私のコードです

struct TextFeildView: View {
    
    private var placeHolder: String = ""
    @Binding private var text: String
    @Namespace private var titleNameSpace
    
    init(_ placeHolder: String, text: Binding<String> ) {
        self.placeHolder = placeHolder
        self._text = text
    }
    
    var body: some View {
        VStack() {
            HStack {
                Text(placeHolder)
                    .hidden(text == "")
                    .animation(.default)
                    .matchedGeometryEffect(id: "titleNameSpace", in: titleNameSpace)
                Spacer()
            }.padding(.horizontal,32)
            VStack {
                ZStack(alignment: .leading) {
                    Text(placeHolder)
                        .hidden(text != "")
                        .animation(.default)
                        .matchedGeometryEffect(id: "titleNameSpace", in: titleNameSpace)
                    TextField("", text: $text)
                }
                Color.gray
                    .frame(width: screenFrame.Width - 64, height: 1, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
            }.padding(.horizontal,32)
        }
    }
}

struct TextFeildView_orignal: View {
    @State var text : String = ""
    var body: some View {
        TextFeildView("PlaceHolder", text: $text)
    }
}

struct TextFeildView_Previews: PreviewProvider {
    static var previews: some View {
        TextFeildView_orignal()
    }
}

私を助けてください

4

0 に答える 0