iOS- Detect current size classes on viewDidLoad

前端 未结 5 1738
旧时难觅i
旧时难觅i 2020-12-13 02:02

I\'m working with adaptive Layout on iOS 8 and I want to get exactly what the size classes are on viewDidLoad. Any ideas about that?

5条回答
  •  难免孤独
    2020-12-13 02:41

    As of iOS 8 UIViewController adopts the UITraitEnvironment protocol. This protocol declares a property named traitCollection which is of type UITraitCollection. You can therefor access the traitCollection property simply by using self.traitCollection

    UITraitCollection has two properties that you want to access named horizontalSizeClass and verticalSizeClass Accessing these properties return an NSInteger. The enum that defines the returned values is declared in official documentation as follows- (this could potentially be added to in the future!)

    typedef NS_ENUM (NSInteger, UIUserInterfaceSizeClass {
       UIUserInterfaceSizeClassUnspecified = 0,
       UIUserInterfaceSizeClassCompact     = 1,
       UIUserInterfaceSizeClassRegular     = 2,
    };
    

    So you could get the class and use say a switch to determine your code direction. An example could be -

    NSInteger horizontalClass = self.traitCollection.horizontalSizeClass;
    NSInteger verticalCass = self.traitCollection.verticalSizeClass;
    
    switch (horizontalClass) {
        case UIUserInterfaceSizeClassCompact :
            // horizontal is compact class.. do stuff...
            break;
        case UIUserInterfaceSizeClassRegular :
            // horizontal is regular class.. do stuff...
            break;
        default :
            // horizontal is unknown..
            break;
    }
    // continue similarly for verticalClass etc.
    

提交回复
热议问题