小笨笨不懂编程 2021-03-04 21:40 采纳率: 0%
浏览 23

ios Orientation和屏幕旋转怎么搞

最近有个业务,需要在程序中动态转屏。现在我搞不太清楚。

我在uidevice orientation 中勾选了portrait, LandscapeRight. 在RootViewController中, supportedOrientation返回portrait,

shouldautorotate返回yes.因为要求进app是竖屏。现在问题来了

1.如果我直屏拿着手机,进app是竖屏的,这没问题,但是我横着拿却是横屏的,这就导致我的ui乱了

2.在这样的情况下,手动调用转屏发现没有效果

 

请问这是为什么呢

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 09:52
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题主要是由两种原因引起的:

    1. 你的应用不支持横向屏幕
    2. 你使用了错误的方法来检测屏幕方向

    解决方法如下:

    1. 如果你的应用不支持横向屏幕,那么你需要确保你的应用能够识别出所有的可能的方向,并且提供相应的功能(比如在横屏下显示特定的UI元素)。
    2. 如果你正在使用shouldAutorotate属性来检测屏幕方向,那么你应该将它设置为YES。但是,如果你的应用不支持横向屏幕,那么这个属性不会有任何作用。你应该使用supportedInterfaceOrientations属性来获取可用的界面方向。

    例如,你可以这样做:

    - (BOOL)shouldAutorotate {
        // 获取当前设备的界面方向
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSArray *interfaceOrientations = [defaults objectForKey:@"interfaceOrientations"];
        
        if ([interfaceOrientations containsObject:UIDeviceOrientationLandscapeRight]) {
            return YES;
        }
        
        return NO;
    }
    

    然后,在你的主视图控制器里使用supportedInterfaceOrientations属性来获取可用的界面方向:

    - (NSArray *)supportedInterfaceOrientations {
        // 获取当前设备的界面方向
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSArray *interfaceOrientations = [defaults objectForKey:@"interfaceOrientations"];
        
        return interfaceOrientations;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 检查是否有足够的屏幕方向
        NSArray *orientations = self.supportedInterfaceOrientations;
    
        if ([orientations count] == 0) {
            // 这个设备不支持任何屏幕方向
            NSLog(@"This device does not support any screen orientations.");
        } else if ([orientations containsObject:UIDeviceOrientationLandscapeRight]) {
            // 这个设备支持横向屏幕
            NSLog(@"This device supports landscape right.");
        } else if ([orientations containsObject:UIDeviceOrientationPortrait]) {
            // 这个设备支持竖向屏幕
            NSLog(@"This device supports portrait.");
        }
    }
    

    这样,你的应用程序就可以正确地根据屏幕方向进行布局和行为处理了。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵