問題タブ [swiftui-scrollview]

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 投票する
0 に答える
111 参照

swiftui - NavigationView内のタブビューでSwiftUI自動折りたたみナビゲーションバー

私のコードには、ここで見られるような構造があります。

TabView は NavigationView 内にあります。両方の tabItem にスクロールビューがあります。statsView では NavigationBar は自動的に閉じますが、secondStatsView では閉じません (gif を参照)。ユーザーはアプリの最初のページで何かを選択でき、選択後にタブビューが開くため、このコード構成を使用したいと思います。ユーザーはどのタブからでも firstView に戻ることができます。この問題を克服する方法はありますか?

ここに画像の説明を入力

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

ios - SwiftUI コンテンツの合計幅が画面幅よりも小さい場合、動的水平スクロール ビューでコンテンツを中央に配置するにはどうすればよいですか?

動的画像配列からの画像の束を表示する水平スクロールビューがあります。コンテンツの幅の合計が画面の幅よりも大きい場合、すべて問題ありません。ただし、配列に画像が 1 つしかない場合は、デフォルトの動作である先頭に配置されます。

コンテンツの幅の合計が画面の幅よりも小さい場合にコンテンツを中央に配置したいのですが、それを実現する方法がわかりません。

したがって、この場合、画像が1つしかない場合、それは整列されていますが、コンテンツが画面いっぱいになるまで中央に配置してからスクロールします。画面いっぱいになるまでバウンスしてもバウンスしなくてもかまいません。

0 投票する
2 に答える
538 参照

ios - SwiftUI - ScrollView 内の長い GeometryReader の高さを計算する

この質問に基づいています: SwiftUI - ビュー間の描画 (曲線) パス

を使用して、必要なビューとパスを描画しますGeometryReader。問題は、画面が長くなりすぎてすべてを表示できないことです (そのようなビューは 15 ありますが、ここでは 6 つしか表示されません)。

ここに画像の説明を入力

ScrollViewだから...私は全体にaを追加します。そうGeometryReaderしないと、すべてのビューが見当違いになるためです。コードは次のとおりです。

(内容は基本的に1.画面サイズから点を計算する、2.点に沿ってパスを描く、3.点に円を配置するだけです)

問題:これで、親と子から高さを取得する必要が
あることがわかりました。これは「鶏卵問題」になります。だから私は手動での高さを計算したい。GeometryReaderScrollViewGeometryReader


私の試み

1 回目の試行

最も簡単な方法は、いくつかの固定値を取得して、大まかな値を計算することです。これをに追加するだけGeometryReaderです:

これは機能します。しかし、今は非常に長い画面があり、下部に不要なスペースがあります。また、電話のモデルによっては、まったく異なるように見える場合があります。

2回目の試行

考えられる解決策の 1 つは、DispatchQueue.main.async内部を使用して、そこにある計算された子の高さに変数を.body設定することです。@Stateここで説明されているように: https://stackoverflow.com/a/61315678/1972372

そう:

これはまったく機能しません。はScrollView何らかの理由で 100 または 10 のいずれかの固定値を受け取り、変更されることはありません。そのブロックを子のいずれかに配置して.background(...)、それぞれの値を合計しようとしましたが、無限ループしか作成されませんでした。でも、どうにかうまくいく可能性はあったようです。

3回目の試行

このチュートリアルまたはこの回答PreferenceKeysと同様に使用します: https://stackoverflow.com/a/64293734/1972372

これは本当にうまくいくように思えました。ZStackの中に を配置しGeometryReaderて、取得するビューを取得heightし、それに類似.background(...)したものを追加しました。

と一緒.onPreferenceChange(...)に。

しかし残念ながら、これはまったく変更されず、最初に 10 のベース値で一度しか呼び出されなかったため、すべての試みの中で最も効果がありませんでした。すべての子ビューに配置しようとしましたが、奇妙な結果しか得られなかったため、それ。


助けが必要

私は今、他の2つの頭痛の種を免れるために、愚かだが機能する最初の試みの解決策を採用したいと思っています。

試み 2 または 3 で私が何を間違えたのか、そしてなぜ私が望む結果を得ることができなかったのかを誰かが理解できますか? 彼らはうまくいくように見えるからです。


完全なコード

リクエストに応じて、ここに完全なクラスがあります (1 回目の試行手法を使用):