【问题标题】:How can we get the screen size while multitasking?多任务处理时如何获取屏幕尺寸?
【发布时间】:2016-06-30 22:53:09
【问题描述】:

我想在 iPad pro 中用户拆分屏幕时获取视图的屏幕尺寸,以便我可以根据需要动态设置视图?

[UIScreen mainScreen].bounds 给了我整个屏幕数据

【问题讨论】:

  • 我认为您应该使用 iOS 中的自动布局和大小类来处理这个问题。
  • 感谢您的快速回复,实际上我的应用程序有动态视图,所以我没有使用自动布局
  • 那时我只需要屏幕尺寸

标签: ios swift ipad


【解决方案1】:

不要使用屏幕尺寸。一般不要使用全局变量。

如果您以编程方式进行操作 - 我们很多人认为这与自动布局之间没有不兼容,顺便说一句 - 使用您的视图的 frame 来确定您的视图内容应该有多大。

【讨论】:

    【解决方案2】:

    试试[[UIApplication sharedApplication] keyWindow].bounds

    请注意,当应用程序进入/从后台状态返回时,或者如果您使用窗口进行自定义工作时,您可能会得到奇怪的结果。

    全文: 我必须实现类似的东西,我自己的自定义大小类,以确定我的多任务支持的通用应用程序是否处于紧凑、常规或完整状态(完整状态定义为横向 iPad 非分屏) - 有点解决了像这样:

    typedef NS_ENUM (NSInteger, OBDTraitStyle) {
        OBDTraitStyleCompact,
        OBDTraitStyleMedium,
        OBDTraitStyleFull
    };
    
    static NSNumber *_previousGlobalTraitStyleNumber = nil;
    
    @implementation UITraitCollection (OBD)
    
    - (OBDTraitStyle)obd_traitStyle
    {
        UIApplicationState state = [[UIApplication sharedApplication] applicationState];
        if (state == UIApplicationStateBackground)
        {
            if (_previousGlobalTraitStyleNumber != nil)
            {
                NSLog(@"App in background - returning previous trait style: %ld", (long)[_previousGlobalTraitStyleNumber integerValue]);
                return [_previousGlobalTraitStyleNumber integerValue];
            }
            else
            {
                NSLog(@"App in background - cannot return previous trait style, as it doesn't exist");
            }
        }
    
        OBDTraitStyle traitStyle = 0;
    
        if (self.horizontalSizeClass == UIUserInterfaceSizeClassCompact)
        {
            traitStyle = OBDTraitStyleCompact;
        }
        else
        {
            UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    
            if (window.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact)
            {
                traitStyle = OBDTraitStyleCompact;
            }
            else
            {
                CGSize viewSize = window.bounds.size;
                BOOL horizontalExpanded = (viewSize.width > 768);
    
                if (horizontalExpanded == NO)
                {
                    traitStyle = OBDTraitStyleMedium;
                }
                else
                {
                    traitStyle = OBDTraitStyleFull;
                }
            }
        }
    
        _previousGlobalTraitStyleNumber = @(traitStyle);
        return traitStyle;
    }
    
    @end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      相关资源
      最近更新 更多