这里有一个示例代码,该设备在首次启动时以及在检测到方向改变时将显示为“纵向”或“横向”。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
getOrientation()
}
func getOrientation() {
let orientation = UIDevice.current.orientation
if orientation == .landscapeLeft || orientation == .landscapeRight {
print("landscape")
}
else {
print("portrait")
}
}
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
getOrientation()
}
}
如果我使用手机头像启动该应用程序,则可以正常运行。但是,如果我在横向手机上启动该应用程序,它将首先检测人像。但是,如果以后旋转设备,那将是正确的。这是错误还是我使用UIDevice.current.orientation
的方式不正确?
答案 0 :(得分:1)
除非通过调用beginGeneratingDeviceOrientationNotifications()
启用了定向通知,否则此属性的值始终返回0,这是未知的。
答案 1 :(得分:1)
看,您的代码是完美的,但是调用是不合适的。 viewDidLoad
方法不能保证界面方向或任何与UI相关的属性,它只是说view
已被加载,但是如果您想保证获得正确的详细信息,则应在{ {1}}(主队列)会给出正确的DispatchQueue.main.async(execute: block)
或另一种方式是在orientation
下调用,但这有一个缺点,即根据您的视图和子视图的大小调整多次调用。
viewDidLayoutSubviews
参考:view.frame.width IS correct in viewDidLoad with storyboard, why?
Apple Docs:https://developer.apple.com/documentation/uikit/uiviewcontroller
答案 2 :(得分:0)
仅在旋转设备时触发viewWillTransition
方法。您应该尝试在getOrientation
viewDidAppear
答案 3 :(得分:0)
更新您的测试代码
a = df.index.get_level_values(0).to_period('M')
b = df.index.get_level_values(1)
mux1 = pd.MultiIndex.from_arrays([a,b], names=df.index.names)
mux2 = pd.MultiIndex.from_arrays([a + 1, b], names=df.index.names)
df = df.set_index(mux1)
df1 = df.set_index(mux2)
df['utilization'] = df.sub(df1)
print (df)
utilization
job_date branch_id
2018-05 1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
2018-06 1 0.071595
2 0.100310
3 -0.031930
4 0.308004
5 0.038260
6 0.080295
7 -0.027372