基于设备旋转更新变量 - Swift UI
Posted
技术标签:
【中文标题】基于设备旋转更新变量 - Swift UI【英文标题】:Update variables based on device rotation - Swift UI 【发布时间】:2021-01-20 13:57:31 【问题描述】:我找到并使用了一些代码,这些代码将根据设备大小和旋转返回一个变量 true。然而,当设备旋转时,这些变量不会更新,文本也不会改变。我想我需要使用一个可观察的对象,但不确定如何转换这个扩展?这是我在下面使用的代码。
内容视图()
struct ContentView3: View, SizeClassAdjustable
@Environment(\.verticalSizeClass) var _verticalSizeClass
@Environment(\.horizontalSizeClass) var _horizontalSizeClass
var verticalSizeClass: UserInterfaceSizeClass? _verticalSizeClass
var horizontalSizeClass: UserInterfaceSizeClass? _horizontalSizeClass
var body: some View
if(self.isPadLandscape)
Text("iPad Landscape")
else if(self.isPadPortrait)
Text("iPad Portrait")
else if(self.isPortrait)
Text("iPhone Portrait")
else if(self.isLandscape)
Text("iPhone Landscape")
扩展:
protocol SizeClassAdjustable
var verticalSizeClass: UserInterfaceSizeClass? get
var horizontalSizeClass: UserInterfaceSizeClass? get
extension SizeClassAdjustable
var isPad: Bool
return horizontalSizeClass == .regular && verticalSizeClass == .regular
var isPadLandscape: Bool
isPad && UIDevice.current.orientation.isLandscape
var isPadPortrait: Bool
isPad && UIDevice.current.orientation.isPortrait
var isPadOrLandscapeMax: Bool
horizontalSizeClass == .regular
var isLandscapeMax: Bool
horizontalSizeClass == .regular && verticalSizeClass == .compact
var isLandscape: Bool
verticalSizeClass == .compact
var isPortrait: Bool
verticalSizeClass == .regular
【问题讨论】:
这能回答你的问题吗? SwiftUI Repaint View Components on Device Rotation 【参考方案1】:检查设备是纵向还是横向模式,如下所示:
let screen = UIScreen.main.bounds
if UIDevice.current.userInterfaceIdiom == .phone //Phone
if screen.width < screen.height //Portrait
else //Landscape
else //iPad
if screen.width < screen.height //Portrait
else //Landscape
然后在适当的范围内执行您的操作。 记得导入 UIKit 来使用这个方法。
【讨论】:
以上是关于基于设备旋转更新变量 - Swift UI的主要内容,如果未能解决你的问题,请参考以下文章
Swift:如何在设备旋转后刷新UICollectionView布局
在 App Delegate 级别基于设备强制定向和禁用旋转?