SwiftUI SplitView等でViewサイズ変更を検知、処理実行
GeometryReaderを使用して変更を監視
onChange(of:perform:)でGeometryReaderを値を監視。
var body: some View { GeometryReader { geometry in VStack { // //View // } .onChange(of: geometry.size.width, perform: {newValue in print("geometry onChange:\(geometry.size.width):\(geometry.size.height)") print("UIScreen:\(UIScreen.main.bounds.width):\(UIScreen.main.bounds.height)") // // 変更によってしたい処理 // }) } }
回転で確認
heightはSafeArea分少なくなります。
// 縦に geometry onChange:1024.0:1322.0 UIScreen:1024.0:1366.0 // 横に UIScreen:1366.0:1024.0 width:1366.0,height980.0
画面サイズに合わせる
.edgesIgnoringSafeArea(.all)を使用します。
var body: some View { GeometryReader { geometry in VStack { // //View // } .onChange(of: geometry.size.width, perform: {newValue in print("geometry onChange:\(geometry.size.width):\(geometry.size.height)") print("UIScreen:\(UIScreen.main.bounds.width):\(UIScreen.main.bounds.height)") // // 変更によってしたい処理 // }) } .edgesIgnoringSafeArea(.all) }
// 縦に eometry onChange:1024.0:1366.0 UIScreen:1024.0:1366.0 // 横に geometry onChange:1366.0:1024.0 UIScreen:1366.0:1024.0