开发者社区 问答 正文

禁用框架中状态栏和键盘的旋转

因此,问题如下:

我正在研究框架(这很重要,因为它没有AppDelegate文件)。我需要作出以下行为:

框架可以从纵向或横向打开,但当在确定的方向打开时,框架应该保持锁定(因此,当我在景观中打开它时,所有的屏幕都应该是景观的,当打开时,所有的屏幕都应该保持在纵向)。 问题如下:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotate
{
    return NO;
}

用这些代码定义的代码“锁定”视图控制器,但是状态栏和键盘仍然在iPhone移动中旋转。

我还在Info.plist中添加了基于视图控制器的状态栏外观。

我没有主板或任何类型的故事板,根导航是在协调器中定义的:

self.displayWindow = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
self.displayWindow.rootViewController = self.navigationController;
[self.displayWindow makeKeyAndVisible];

这里的UINavigationController很清楚,香草一号。我也尝试过用这个解决方案覆盖NAV控制器:

iOS 6中的操作旋转

但不管用。

因为我没有应用程序委托,所以我不能定义“全局”接口方向。

有人能帮我解决这个问题吗?

展开
收起
游客5akardh5cojhg 2019-12-07 18:44:35 449 分享 版权
阿里云 AI 助理回答

在没有 AppDelegate 文件的情况下,你仍然可以通过在你的自定义框架或视图控制器中实现相关方法来控制应用的界面方向锁定。从你的描述来看,你已经尝试了锁定视图控制器的方向,但状态栏和键盘的行为并没有如预期那样被锁定。这可能是因为你需要更精确地控制整个应用程序的行为,尤其是在没有 AppDelegate 的情况下。

以下是一些可能帮助你解决问题的建议:

  1. 确保 Info.plist 设置正确: 确保你的 Info.plist 文件中已正确设置了支持的设备方向。通常,你需要设置 Supported interface orientationsSupported interface orientations (iPad) 来限制应用允许的旋转方向。同时,确认是否已启用 View controller-based status bar appearance 并将其设置为 NO,以便全局控制状态栏。

  2. 覆盖 UINavigationController 的行为: 由于你是直接使用 UINavigationController 作为窗口的根视图控制器,需要确保其内部的行为也符合你的需求。你可以创建一个 UINavigationController 的子类,并在其中重写上述方法(preferredInterfaceOrientationForPresentation, supportedInterfaceOrientations, 和 shouldAutorotate),以强制执行你希望的界面方向锁定策略。

  3. 管理状态栏旋转: 对于状态栏的问题,如果你的应用不基于 ViewController 状态栏外观,你可能需要在你的顶层视图控制器中手动管理状态栏的旋转。可以尝试在 viewDidAppear 或 willAnimateRotationToInterfaceOrientation 等生命周期方法中设置状态栏的方向。

  4. 键盘处理: 键盘的旋转通常会跟随当前的界面方向,如果状态栏和键盘仍然旋转,可能是因为它们没有遵循你的视图控制器的旋转规则。对于键盘,你可能需要监听键盘的显示和隐藏通知,并在适当的时候调整键盘的界面方向。这可能涉及到对 UIKeyboardWillShowNotification 和 UIKeyboardWillHideNotification 的观察,并在回调中适配界面方向。

  5. 检查其他代码影响: 确认是否有其他第三方库或代码片段无意中影响了界面旋转的行为。有时候,即使你的设置看似正确,也可能因为其他部分的代码逻辑而未按预期工作。

  6. 使用 Category 扩展 UINavigationController: 如果不想创建 UINavigationController 的子类,也可以考虑使用 Category 来扩展 UINavigationController 的行为,覆写那些与界面旋转相关的代理方法。这样做的好处是不需要改变现有代码结构,直接通过分类增强 UINavigationController 的功能。

请尝试以上建议,并根据实际情况调整,希望能帮助你解决界面锁定的问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: