web-dev-qa-db-ja.com

ScrollViewコンテンツをSwiftUIの親に合わせる

スクロール画面を作成したいので、ScrollViewを埋め込みたいと思いました。しかし、ビューを圧縮されたサイズに縮小するだけでは達成できません。 ScrollViewを垂直方向にスクロールして、コンテンツがscrollViewの幅と一致するようにしたいとします。だから私はそのようなプレビューを使用します:

struct ScrollSubview_Previews : PreviewProvider {
    static var previews: some View {
        func textfield() -> some View {
            TextField(.constant("Text")).background(Color.red)
        }

        return Group {
            textfield()
            ScrollView {
                textfield()
            }
        }
    }
}

しかし、それはこのような結果で終わります:

enter image description here

6
olejnjak

これはベータ2にも存在する既知の問題です-AppleのXcode 11リリースノートをここでチェックしてください⬇️ https://developer.Apple.com/documentation/xcode_release_notes/xcode_11_beta_2_release_notes

Apple=自体で説明されている回避策は、要素内のScrollViewに固定フレームを設定することです。その場合、画面の幅を修正するためにGeometryReaderを使用することをお勧めします。高さは自動的にコンテンツに適合します。

たとえば、ScrollViewのコンテンツを画面の幅に合わせる必要がある場合は、次のようにします。

return GeometryReader { geometry in
     Group {
         self.textfield()
         ScrollView {
             self.textfield()
                 .frame(width: geometry.size.width)
         }
     }
 }
2
xxcat

ここにトリックがあります:HStackを1つだけ持つSpacerを紹介します:

return Group {
        HStack {
            Spacer()
        }
        textfield()
        ScrollView {
            textfield()
        }
    }
1
ielyamani