SwiftUI sheet表示、GeometryReader使用、VStackのみの状態と同じにする→sheetのサイズが知りたい
目的
sheetのサイズが知りたい
単純にGeometryReaderを挿入すると、デザインが崩れる。
元のデザインを使用出来る方法、sheetのサイズをデザインに使用する方法を探る。
sheet表示元
import SwiftUI struct ContentView: View { @State var showPopup: Bool = false var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundColor(.accentColor) Text("Hello, world!") Button(action: { self.showPopup.toggle() }, label: { Text("Popup") }) .buttonStyle(.bordered) } .padding() .sheet(isPresented: self.$showPopup, content: { PopupView() }) } }
VStackのみ
struct PopupView: View { var body: some View { VStack { Text("PopupView") .font(.largeTitle) Image(systemName: "star.fill") .font(.largeTitle) .symbolRenderingMode(.multicolor) } } }
GeometryReader + VStack
struct PopupView: View { var body: some View { GeometryReader { geometry in VStack { Text("PopupView") .font(.largeTitle) Image(systemName: "star.fill") .font(.largeTitle) .symbolRenderingMode(.multicolor) } } } }
GeometryReader + VStack alignment指定
struct PopupView: View { var body: some View { GeometryReader { geometry in VStack(alignment: .center) { Text("PopupView") .font(.largeTitle) Image(systemName: "star.fill") .font(.largeTitle) .symbolRenderingMode(.multicolor) } } } }
GeometryReader + VStack frame指定
struct PopupView: View { var body: some View { GeometryReader { geometry in VStack() { Text("PopupView") .font(.largeTitle) Image(systemName: "star.fill") .font(.largeTitle) .symbolRenderingMode(.multicolor) } .frame(width: geometry.size.width, height: geometry.size.height) } } }