UIWindow状态栏旋转

时间:2016-05-06 23:25:00

标签: ios uiviewcontroller uiwindow

我有一个应用程序,其中有两个UIWindow实例的用例。第一个实例运行所有正常的应用程序交互,但我需要能够将视图控制器呈现在其他所有内容之上,无论用户在应用程序中执行什么操作,而无需用户交互。

我有第二个窗口正常工作并呈现良好状态。在这个视图控制器中,我只支持纵向模式(虽然应用程序的其他部分支持横向)。我试图在窗口rootViewController中使用这些方法阻止轮换:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
  return [.Portrait]
}

override func shouldAutorotate() -> Bool {
  return false
}

成功阻止设备旋转视图控制器,但它仍然允许状态栏旋转。我还想阻止状态栏旋转。我尝试将以下内容添加到AppDelegate

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
  if let _ = window as? MyTopWindow {
    return [.Portrait]
  } else {
    return .All
  }
}

然而,这也没有奏效。状态栏仍然会旋转。

我已经看到了下面的问题,并试图实施解决方案,但它不适用于我的案例:Status bar rotates separated from UIWindow

修改

这是我创建UIWindow的代码:

self.callManagementWindow = ActiveCallManagementWindow(frame: UIScreen.mainScreen().bounds)
self.callManagementWindow.rootViewController = primaryViewController
self.callManagementWindow.hidden = false
self.callManagementWindow.makeKeyAndVisible()

3 个答案:

答案 0 :(得分:3)

前段时间我还遇到了两个窗口和旋转的问题,如果我没记错,你需要覆盖supportedInterfaceOrientations() shouldAutorotate() rootViewController中的UIWindowenabledProtocols=TLSv1.2作为第二个

答案 1 :(得分:1)

您可以在primaryViewController的viewDidAppear中尝试这个:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


        <TextView
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:id="@+id/sample1"
            android:text="Sample1"/>

          <LinearLayout 
          android:orientation="vertical" android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:visibility="gone"
          android:id="@+id/insertat">
              <TextView
                android:layout_width="fill_parent"
                android:layout_height="40dp"
                android:text="Sample1"
                android:id="@+id/sample3"/>
          </LinearLayout>

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:id="@+id/sample2"
            android:text="Sample2"/>

    </LinearLayout>





 LinearLayout layout = (LinearLayout)findViewbyId(R.id.insertat);
     mKeepPlayingButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    layout.setVisibility(View.visible);
                }
            });

答案 2 :(得分:0)

就我而言,我在代码中设置了UIWindow,同时还指定了主故事板 在Info.plist

<key>UIMainStoryboardFile</key>
    <string>Main</string>

Main.storyboard有一个简单的初始ViewController(此ViewController未指定任何方向)

解决方案是删除UIMainStoryboardFile(在Info.plist或常规->目标->部署信息->主界面中)