设备以横向启动时,UIDevice方向返回纵向

时间:2018-11-05 07:15:45

标签: ios swift orientation uidevice

这里有一个示例代码,该设备在首次启动时以及在检测到方向改变时将显示为“纵向”或“横向”。

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的方式不正确?

4 个答案:

答案 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