SizeClasser 0.0.1

SizeClasser 0.0.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布时间最新发布2017年4月
SwiftSwift 版本3.0
SPM支持 SPM

Cem Olcay 维护。



SizeClasser

具体针对设备的 UITraitCollection 辅助类,用于检测 iOS 中的分割视图。

演示

alt tag

要求

  • Swift 3.0+
  • iOS 8.0+

安装

use_frameworks!
pod 'SizeClasser'

使用

SizeClasser 是一个 OptionSet 类型结构体。
您可以使用 ViewController 的 traitCollection 属性来初始化它,以识别当前设备特定的方向和分割视图状态。

/// 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)

例如,如果您想检测横向模式下的 iPad 分割视图 1/3,可以简单地

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
      }
    }

此外,您还可以使用 SizeClasser.isiPadPro 来检测 12.9 英寸的 iPad Pro,如果您想更具体地布局视图。

关于 traitCollectionDidChange:previousTraitCollection 函数的说明

此函数仅在 traitCollection 发生变化时调用。
如果您正在 iPad 上,无论是纵向还是横向模式,它不会将 1/3 分割视图转换为 2/3 分割视图的转换。
iOS 将它们都计算为 紧凑宽度常规高度 模式。
因此,我建议您使用 viewDidLayoutSubviews: 函数来专门检测分割视图的变化。
alt tag