問題タブ [uiviewrepresentable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
446 参照

swift - SwiftUI: UIViewRepresentable の updateUIView() 関数が原因でアプリがフリーズし、CPU が急上昇する

SwiftUI にカスタム テキスト フィールドがあり、テキスト フィールドのコンテンツの量に応じて行数を調整します。アプリでは、ユーザーはテキスト フィールドを追加できるので、テキスト フィールドの高さと内容を配列に格納し、テキスト フィールドが追加されるたびに配列に追加します。

内のコードを削除するたびにupdateUIView()、アプリはスムーズに実行されますが、もちろん、テキスト フィールドは表示されませんが、以下のコードのようにコードを含めるたびに、CPU が 99% に急上昇し、アプリがフリーズします ( 1 つのテキスト フィールドのみ)。

なぜこれが起こっているのか、そしてそれに対する修正を知っている人はいますか?

0 投票する
1 に答える
598 参照

swift - SwiftUI: 独自の TextField を作成し、プログラムでコンテンツを変更する

次のチュートリアルで独自の TextField を作成しました: https://www.youtube.com/watch?v=9kfbJVqqTKc&t=17s。すべてが正常に機能しますが、TextField のコンテンツを更新する機能を追加しました。問題は、コンテンツをプログラムで設定すると、関数 textViewDidChange() がコーディネーターで呼び出されないことです。これにより、TextField 全体が折りたたまれます。つまり、何かを入力してもプレースホルダーが消えなくなり、自動的に大きくなりません。新しい行を作成する必要があるポイントに到達すると、何らかの理由でテキストが単純に削除されます。

この問題を解決する方法はありますか?

コード:

コーディネーター自体で textViewDidChange() 関数を呼び出すと、問題を解決できると思います。しかし、私はそれを行う方法がわかりません。

前もって感謝します

編集: カスタム TextField の実装方法:

編集2:私が見つけたと思います:

ビューが初めて表示されるとき:

-すべてがうまく機能します

最初のリセット後...

  1. キーボードボタン「リターン」で2番目のリセットを呼び出すと、テキストが通常の行より長くない場合に機能しますが、「通常」ボタンでリセットを呼び出すとまったく機能しません
  2. プレースホルダーが表示されなくなりました
  3. 入力したテキストが通常の行よりも長くなり、テキスト ボックスを大きくする必要がある場合、テキストが失われます