在 SwiftUI 中更改方向时更新 UI

Posted

技术标签:

【中文标题】在 SwiftUI 中更改方向时更新 UI【英文标题】:Update UI when orientation is changing in SwiftUI 【发布时间】:2021-01-05 20:09:55 【问题描述】:

我已经开始学习 SwiftUI。当方向改变时,我尝试更新 UI。 我在视图中添加了@Environment(\.horizontalSizeClass) var sizeClass,然后iphone模拟器在旋转时会自动更新UI。但 iPad 模拟器在旋转时不会更新 UI。你能告诉我如何更新 iPad 的 UI 吗?

【问题讨论】:

不确定是否可行,另请参阅here 这能回答你的问题吗? SwiftUI - Determining Current Device and Orientation 【参考方案1】:

如果您查看人机界面指南中的设备尺寸类别,您会注意到 iPad 在横向和纵向模式下都具有“常规”宽度和高度。

所以当你使用 .horizo​​ntalSizeClass 时,它同时适用于 iPhone 和 iPad,只是 iPad 在旋转时不会改变 sizeClass。

https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/

如果您使用 GeometryReader 设置帧大小,它们将在设备旋转时自动更新。 在视图上设置 .frame(maxWidth:) 也非常有用,这样如果 iPad 是横向的,视图的内容就会受到限制。 715 附近的某个地方运行良好。

【讨论】:

在这里使用尺寸等级将无济于事。最好使用UIDevice.orientationDidChangeNotification,如***.com/a/65586833/8697793

以上是关于在 SwiftUI 中更改方向时更新 UI的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:在设备方向上重绘会使计时器无效

如何在 SwiftUI 中更改滚动视图的滚动方向?

SwiftUI:更改数据源时选择器无法正确更新

选择器更改时,SwiftUI 环境变量中的字符串插值未更新

当 UserDefaults 值更改 SwiftUI 时,@FetchRequest 谓词不会更新

iOS - 位置更改时 SwiftUI 更新文本