CocoaPods trunk is moving to be read-only. Read more on the blog, there are 2 months to go.

SizeClasser 0.0.1

SizeClasser 0.0.1

TestsTested ✗
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Apr 2017
SwiftSwift Version 3.0
SPMSupports SPM ✗

Maintained by Cem Olcay.



SizeClasser

Device specific UITraitCollection helper with split view detection for iOS.

Demo

alt tag

Requirements

  • Swift 3.0+
  • iOS 8.0+

Install

use_frameworks!
pod 'SizeClasser'

Usage

SizeClasser is an OptionSet type struct.
You can initilize it with your viewController’s traitCollection property to identify your current device specific orientation and split view status.

/// Screen height is bigger than width. Portrait mode in all devices.
public static let portrait = SizeClasser(rawValue: 1 << 0)
/// Screen width is bigger than height. Landscape mode in all devices.
public static let landscape = SizeClasser(rawValue: 1 << 1)
/// Portrait mode for iPhone devices.
public static let iPhonePortrait = SizeClasser(rawValue: 1 << 2)
/// Landscape mode for iPhone devices.
public static let iPhoneLandscape = SizeClasser(rawValue: 1 << 3)
/// Portrait mode for iPad devices.
public static let iPadPortrait = SizeClasser(rawValue: 1 << 4)
/// Landscape mode for iPad devices.
public static let iPadLandscape = SizeClasser(rawValue: 1 << 5)
/// Split mode 1/3 of visible area in iPad devices.
public static let iPadSplitOneThird = SizeClasser(rawValue: 1 << 8)
/// Split mode 1/2 of visible area in iPad devices.
public static let iPadSplitHalf = SizeClasser(rawValue: 1 << 9)
/// Split mode 2/3 of visible area in iPad devices.
public static let iPadSplitTwoThird = SizeClasser(rawValue: 1 << 10)

For example, if you want to detect iPad split view 1/3 on landscape orientation, simply:

guard let trait = SizeClasser(traitCollection: traitCollection ?? super.traitCollection) else { return }
    if trait.contains([.iPadLandscape, .iPadSplitOneThird]) {
      // You are on iPad, landscape and 1/3 split view mode
      if SizeClasser.isiPadPro {
        // You are on 12.9" iPad
      } else {
        // You are on regular iPad / iPad mini
      }
    }

Also you can use SizeClasser.isiPadPro to detect 12.9" iPad Pro if you want to layout your views more specificly.

Note on traitCollectionDidChange:previousTraitCollection function:

This function only get called if traitCollection changes.
If you are on iPad, either portrait or landscape mode, it won’t change 1/3 split view to 2/3 split view transitions.
iOS calculates them both compact width regular height mode.
So, I recommend to use viewDidLayoutSubviews: function to detect split view changes specificly.
alt tag