gpt4 book ai didi

ios - 当 supportedInterfaceOrientations 发生变化时如何通知系统?

转载 作者:技术小花猫 更新时间:2023-10-29 10:28:11 26 4
gpt4 key购买 nike

我的 Root View Controller 对 supportedInterfaceOrientations 的实现几乎总是返回 UIInterfaceOrientationMaskAll,但是有一种极端情况会返回 UIInterfaceOrientationMaskLandscape

如果用户旋转设备,这会起作用。但是,如果设备处于纵向模式,则永远不会调用 supportedInterfaceOrientations 方法,除非用户手动旋转设备。

我如何以编程方式告诉系统此方法的返回值已更改?

根据文档,似乎我应该能够调用 [UIViewController attemptRotationToDeviceOrientation] 但这没有任何效果(supportedInterfaceOrientations 从未被调用并且屏幕不旋转)。

我发现其他人发布了各种解决方法来尝试解决这个问题,但在我的测试中没有一个有效。我怀疑它们可能适用于 iOS 5.0,但不适用于 iOS 6.0。

我在 Root View Controller 的 shouldAutorotate 方法中返回 YES

最佳答案

首先,如果您想以横向模式显示 UIViewController,那么使用它可能会有用。

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}

此外,很大程度上取决于您的 UIViewController 嵌入了哪个 Controller 。

例如,如果它在 UINavigationController 中,那么您可能需要子类化 UINavigationController 以覆盖像这样的方向方法。

子类化的 UINavigationController(层次结构的顶层 View Controller 将控制方向。)需要将其设置为 self.window.rootViewController。

- (BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
return self.topViewController.supportedInterfaceOrientations;
}

从 iOS 6 开始,UINavigationController 不会向其 UIVIewControllers 请求方向支持。因此我们需要对其进行子类化。

注意:

shouldAutorotatesupportedInterfaceOrientations 方法总是在推送操作完成时为 UINavigationController 调用。

关于ios - 当 supportedInterfaceOrientations 发生变化时如何通知系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com