iossize-classes

iOS- Detect current size classes on viewDidLoad


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?


Solution

  • 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.