UITraitCollection

UITraitCollection: NSObject
适配相关

初始化

  • 用户界面
    UITraitCollection *userInterface = [UITraitCollection traitCollectionWithUserInterfaceIdiom:UIUserInterfaceIdiomPhone];
    /*
    typedef NS_ENUM(NSInteger, UIUserInterfaceIdiom) {
        UIUserInterfaceIdiomUnspecified = -1,
        UIUserInterfaceIdiomPhone, // iPhone and iPod touch style UI
        UIUserInterfaceIdiomPad, // iPad style UI
        UIUserInterfaceIdiomTV, // Apple TV style UI
        UIUserInterfaceIdiomCarPlay, // CarPlay style UI
    };
     */
  • 屏幕倍率
    UITraitCollection *scale = [UITraitCollection traitCollectionWithDisplayScale:2];
  • sizeClass
    UITraitCollection *hSizeClass = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
    UITraitCollection *vSizeClass = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];
    /*
     typedef NS_ENUM(NSInteger, UIUserInterfaceSizeClass) {
     UIUserInterfaceSizeClassUnspecified = 0,
     UIUserInterfaceSizeClassCompact     = 1,
     UIUserInterfaceSizeClassRegular     = 2,
     };
     */
  • 3D touch 能力
    UITraitCollection *force = [UITraitCollection traitCollectionWithForceTouchCapability:UIForceTouchCapabilityAvailable];
    /*
     typedef NS_ENUM(NSInteger, UIForceTouchCapability) {
     UIForceTouchCapabilityUnknown = 0,
     UIForceTouchCapabilityUnavailable = 1,
     UIForceTouchCapabilityAvailable = 2
     };
     */

属性

    traitCollection.userInterfaceIdiom;
    traitCollection.displayScale;
    traitCollection.horizontalSizeClass;
    traitCollection.verticalSizeClass;
    traitCollection.forceTouchCapability;

iOS 10

    // 方向?功能不详
    UITraitCollection *direction = [UITraitCollection traitCollectionWithLayoutDirection:UITraitEnvironmentLayoutDirectionLeftToRight];
    /*
     typedef NS_ENUM(NSInteger, UITraitEnvironmentLayoutDirection) {
     UITraitEnvironmentLayoutDirectionUnspecified = -1,
     UITraitEnvironmentLayoutDirectionLeftToRight = UIUserInterfaceLayoutDirectionLeftToRight,
     UITraitEnvironmentLayoutDirectionRightToLeft = UIUserInterfaceLayoutDirectionRightToLeft,
     } NS_ENUM_AVAILABLE_IOS(10_0);
     */
    
    // 功能不详
    UITraitCollection *preferred = [UITraitCollection traitCollectionWithPreferredContentSizeCategory:UIContentSizeCategoryLarge];
    /*
     很多常量可选,略
     */
    
    // 色彩
    UITraitCollection *gamut = [UITraitCollection traitCollectionWithDisplayGamut:UIDisplayGamutSRGB];
    /*
     typedef NS_ENUM(NSInteger, UIDisplayGamut) {
     UIDisplayGamutUnspecified = -1, // UIKit will not set this anymore, instead a sensible default is chosen based on the device capabilities and settings always
     UIDisplayGamutSRGB,
     UIDisplayGamutP3
     } NS_ENUM_AVAILABLE_IOS(10_0);
     */
    traitCollection.layoutDirection;
    traitCollection.preferredContentSizeCategory;
    traitCollection.displayGamut;

方法

  • 合并
    UITraitCollection *b = [UITraitCollection traitCollectionWithTraitsFromCollections:@[hSizeClass, vSizeClass]];
  • 检查包含
    if ([self.traitCollection containsTraitsInCollection:verticaTrait]) {
        
    }

协议

直接可用,NSObject 都可用

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    NSLog(@"change");
    NSLog(@"原来的:%@", previousTraitCollection);
    NSLog(@"新的:%@", self.traitCollection)
}