EnvironmentObject
が便利なので、App全体で使うような変数を environmentObject
として App
でセットしてどこからでも参照できるようにしようとしてみたが、これは期待通り動かない。端末問わず常に displayScale = 1.0
となってしまう。
@main
struct SampleApp: App {
@Environment(\.displayScale) var displayScale
var body: some Scene {
WindowGroup {
RootScreen()
.environmentObject(
AppEnv(
displayScale: displayScale // NG: 常に 1.0
)
)
.onAppeer {
print(displayScale) // NG: 常に 1.0
}
}
}
正しくは、各Viewで都度 displayScale
を定義して body
の中で参照してやる必要がある。
struct TopView: View {
@Environment(\.displayScale) var displayScale
var body: some View {
MainView()
.onAppeer {
print(displayScale) // 👌 iPhone16なら "3.0"
}
}
}
それにしても久しぶりにQiita書いたな
最近はZennとか個人ブログに書くのが流行ってるのかな