QMUIHelper

@interface QMUIHelper : NSObject

+ (instancetype)sharedInstance;
@end

Undocumented

  • Undocumented

    Declaration

    Objective-C

    + (instancetype)sharedInstance;

    Swift

    class func sharedInstance() -> Self

Bundle

  • 获取 QMUIKit.framework Images.xcassets 内的图片资源

    Declaration

    Objective-C

    + (nullable UIImage *)imageWithName:(nonnull NSString *)name;

    Swift

    class func image(withName name: String) -> UIImage?

    Parameters

    name

    图片名

SystemVersion

  • Undocumented

    Declaration

    Objective-C

    + (NSInteger)numbericOSVersion;

    Swift

    class func numbericOSVersion() -> Int
  • Undocumented

    Declaration

    Objective-C

    + (NSComparisonResult)compareSystemVersion:(nonnull NSString *)currentVersion toVersion:(nonnull NSString *)targetVersion;

    Swift

    class func compareSystemVersion(_ currentVersion: String, toVersion targetVersion: String) -> ComparisonResult
  • Undocumented

    Declaration

    Objective-C

    + (BOOL)isCurrentSystemAtLeastVersion:(nonnull NSString *)targetVersion;

    Swift

    class func isCurrentSystem(atLeastVersion targetVersion: String) -> Bool
  • Undocumented

    Declaration

    Objective-C

    + (BOOL)isCurrentSystemLowerThanVersion:(nonnull NSString *)targetVersion;

    Swift

    class func isCurrentSystemLowerThanVersion(_ targetVersion: String) -> Bool

DynamicType

  • 返回当前 contentSize 的 level,这个值可以在设置里面的“字体大小”查看,辅助功能里面有个“更大字体”可以设置更大的字体,不过这里我们这个接口将更大字体都做了统一,都返回“字体大小”里面最大值。 Returns the level of contentSize The value can be set in Settings - Display & Brightness - Text Size as well as in General - Accessibility - Larger Text This method returns the value set by user or the maximum value in Text Size, whichever is smaller

    Declaration

    Objective-C

    + (nonnull NSNumber *)preferredContentSizeLevel;

    Swift

    class func preferredContentSizeLevel() -> NSNumber
  • 设置当前 cell 的高度,heights 是有七个数值的数组,对于不支持的iOS版本,则选择中间的值返回。 Sets height of the cell; Heights consist of 7 numberic values; Returns the middle value on legacy iOS versions.

    Declaration

    Objective-C

    + (CGFloat)heightForDynamicTypeCell:(nonnull NSArray *)heights;

    Swift

    class func height(forDynamicTypeCell heights: [Any]) -> CGFloat

Keyboard

  • 判断当前 App 里的键盘是否升起,默认为 NO Returns the visibility of the keybord. Default value is NO.

    Declaration

    Objective-C

    + (BOOL)isKeyboardVisible;

    Swift

    class func isKeyboardVisible() -> Bool
  • 记录上一次键盘显示时的高度(基于整个 App 所在的 window 的坐标系),注意使用前用 isKeyboardVisible 判断键盘是否显示,因为即便是键盘被隐藏的情况下,调用 lastKeyboardHeightInApplicationWindowWhenVisible 也会得到高度值。

    Declaration

    Objective-C

    + (CGFloat)lastKeyboardHeightInApplicationWindowWhenVisible;

    Swift

    class func lastKeyboardHeightInApplicationWindowWhenVisible() -> CGFloat
  • 获取当前键盘frame相关

    Warning

    注意iOS8以下的系统在横屏时得到的rect,宽度和高度相反了,所以不建议直接通过这个方法获取高度,而是使用keyboardHeightWithNotification:inView:,因为在后者的实现里会将键盘的rect转换坐标系,转换过程就会处理横竖屏旋转问题。

    Declaration

    Objective-C

    + (CGRect)keyboardRectWithNotification:(nullable NSNotification *)notification;

    Swift

    class func keyboardRect(with notification: Notification?) -> CGRect
  • 获取当前键盘的高度,注意高度可能为0(例如第三方键盘会发出两次notification,其中第一次的高度就为0)

    Declaration

    Objective-C

    + (CGFloat)keyboardHeightWithNotification:
        (nullable NSNotification *)notification;

    Swift

    class func keyboardHeight(with notification: Notification?) -> CGFloat
  • 获取当前键盘在屏幕上的可见高度,注意外接键盘(iPad那种)时,[QMUIHelper keyboardRectWithNotification]得到的键盘rect里有一部分是超出屏幕,不可见的,如果直接拿rect的高度来计算就会与意图相悖。

    Warning

    如果view.window为空(当前View尚不可见),则会使用App默认的UIWindow来做坐标转换,可能会导致一些计算错误

    Declaration

    Objective-C

    + (CGFloat)keyboardHeightWithNotification:
                   (nullable NSNotification *)notification
                                       inView:(nullable UIView *)view;

    Swift

    class func keyboardHeight(with notification: Notification?, in view: UIView?) -> CGFloat

    Parameters

    notification

    接收到的键盘事件的UINotification对象

    view

    要得到的键盘高度是相对于哪个View的键盘高度,若为nil,则等同于调用[QMUIHelper keyboardHeightWithNotification:]

    Return Value

    键盘在view里的可视高度

  • 获取键盘显示/隐藏的动画时长,注意返回值可能为0

    Declaration

    Objective-C

    + (NSTimeInterval)keyboardAnimationDurationWithNotification:
        (nullable NSNotification *)notification;

    Swift

    class func keyboardAnimationDuration(with notification: Notification?) -> TimeInterval
  • 获取键盘显示/隐藏的动画时间函数

    Declaration

    Objective-C

    + (UIViewAnimationCurve)keyboardAnimationCurveWithNotification:
        (nullable NSNotification *)notification;

    Swift

    class func keyboardAnimationCurve(with notification: Notification?) -> UIView.AnimationCurve
  • 获取键盘显示/隐藏的动画时间函数

    Declaration

    Objective-C

    + (UIViewAnimationOptions)keyboardAnimationOptionsWithNotification:
        (nullable NSNotification *)notification;

    Swift

    class func keyboardAnimationOptions(with notification: Notification?) -> UIView.AnimationOptions

AudioSession

  • 听筒和扬声器的切换

    Declaration

    Objective-C

    + (void)redirectAudioRouteWithSpeaker:(BOOL)speaker temporary:(BOOL)temporary;

    Swift

    class func redirectAudioRoute(withSpeaker speaker: Bool, temporary: Bool)

    Parameters

    speaker

    是否转为扬声器,NO则听筒

    temporary

    决定使用kAudioSessionProperty_OverrideAudioRoute还是kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,两者的区别请查看本组的博客文章:http://km.oa.com/group/gyui/articles/show/235957

  • 设置category

    Declaration

    Objective-C

    + (void)setAudioSessionCategory:(nullable NSString *)category;

    Swift

    class func setAudioSessionCategory(_ category: String?)

    Parameters

    category

    使用iOS7的category,iOS6的会自动适配

UIGraphic

  • 获取一像素的大小

    Declaration

    Objective-C

    + (CGFloat)pixelOne;

    Swift

    class func pixelOne() -> CGFloat
  • 判断size是否超出范围

    Declaration

    Objective-C

    + (void)inspectContextSize:(CGSize)size;

    Swift

    class func inspectContextSize(_ size: CGSize)
  • context是否合法

    Declaration

    Objective-C

    + (void)inspectContextIfInvalidatedInDebugMode:(nonnull CGContextRef)context;

    Swift

    class func inspectContextIfInvalidated(inDebugMode context: CGContext)
  • Undocumented

    Declaration

    Objective-C

    + (BOOL)inspectContextIfInvalidatedInReleaseMode:(CGContextRef)context;

    Swift

    class func inspectContextIfInvalidated(inReleaseMode context: CGContext) -> Bool

Device

  • 如 iPhone12,5、iPad6,8

    Declaration

    Objective-C

    + (nonnull NSString *)deviceModel;

    Swift

    class func deviceModel() -> String
  • 如 iPhone 11 Pro Max、iPad Pro (12.9 inch)

    Declaration

    Objective-C

    + (nonnull NSString *)deviceName;

    Swift

    class func deviceName() -> String
  • Undocumented

    Declaration

    Objective-C

    + (BOOL)isIPad;

    Swift

    class func isIPad() -> Bool
  • Undocumented

    Declaration

    Objective-C

    + (BOOL)isIPod;

    Swift

    class func isIPod() -> Bool
  • Undocumented

    Declaration

    Objective-C

    + (BOOL)isIPhone;

    Swift

    class func isIPhone() -> Bool
  • Undocumented

    Declaration

    Objective-C

    + (BOOL)isSimulator;

    Swift

    class func isSimulator() -> Bool
  • 带物理凹槽的刘海屏或者使用 Home Indicator 类型的设备

    Declaration

    Objective-C

    + (BOOL)isNotchedScreen;

    Swift

    class func isNotchedScreen() -> Bool
  • 将屏幕分为普通和紧凑两种,这个方法用于判断普通屏幕

    Declaration

    Objective-C

    + (BOOL)isRegularScreen;

    Swift

    class func isRegularScreen() -> Bool
  • iPhone XS Max / 11 Pro Max

    Declaration

    Objective-C

    + (BOOL)is65InchScreen;

    Swift

    class func is65InchScreen() -> Bool
  • iPhone XR / 11

    Declaration

    Objective-C

    + (BOOL)is61InchScreen;

    Swift

    class func is61InchScreen() -> Bool
  • iPhone X / XS / 11Pro

    Declaration

    Objective-C

    + (BOOL)is58InchScreen;

    Swift

    class func is58InchScreen() -> Bool
  • iPhone 8 Plus

    Declaration

    Objective-C

    + (BOOL)is55InchScreen;

    Swift

    class func is55InchScreen() -> Bool
  • iPhone 8

    Declaration

    Objective-C

    + (BOOL)is47InchScreen;

    Swift

    class func is47InchScreen() -> Bool
  • iPhone 5

    Declaration

    Objective-C

    + (BOOL)is40InchScreen;

    Swift

    class func is40InchScreen() -> Bool
  • iPhone 4

    Declaration

    Objective-C

    + (BOOL)is35InchScreen;

    Swift

    class func is35InchScreen() -> Bool
  • Undocumented

    Declaration

    Objective-C

    + (CGSize)screenSizeFor65Inch;

    Swift

    class func screenSizeFor65Inch() -> CGSize
  • Undocumented

    Declaration

    Objective-C

    + (CGSize)screenSizeFor61Inch;

    Swift

    class func screenSizeFor61Inch() -> CGSize
  • Undocumented

    Declaration

    Objective-C

    + (CGSize)screenSizeFor58Inch;

    Swift

    class func screenSizeFor58Inch() -> CGSize
  • Undocumented

    Declaration

    Objective-C

    + (CGSize)screenSizeFor55Inch;

    Swift

    class func screenSizeFor55Inch() -> CGSize
  • Undocumented

    Declaration

    Objective-C

    + (CGSize)screenSizeFor47Inch;

    Swift

    class func screenSizeFor47Inch() -> CGSize
  • Undocumented

    Declaration

    Objective-C

    + (CGSize)screenSizeFor40Inch;

    Swift

    class func screenSizeFor40Inch() -> CGSize
  • Undocumented

    Declaration

    Objective-C

    + (CGSize)screenSizeFor35Inch;

    Swift

    class func screenSizeFor35Inch() -> CGSize
  • Undocumented

    Declaration

    Objective-C

    + (CGFloat)preferredLayoutAsSimilarScreenWidthForIPad;

    Swift

    class func preferredLayoutAsSimilarScreenWidthForIPad() -> CGFloat
  • Undocumented

    Declaration

    Objective-C

    + (UIEdgeInsets)safeAreaInsetsForDeviceWithNotch;

    Swift

    class func safeAreaInsetsForDeviceWithNotch() -> UIEdgeInsets
  • 判断当前设备是否高性能设备,只会判断一次,以后都直接读取结果,所以没有性能问题

    Declaration

    Objective-C

    + (BOOL)isHighPerformanceDevice;

    Swift

    class func isHighPerformanceDevice() -> Bool
  • 系统设置里是否开启了“放大显示-试图-放大”,支持放大模式的 iPhone 设备可在官方文档中查询 https://support.apple.com/zh-cn/guide/iphone/iphd6804774e/ios

    Declaration

    Objective-C

    + (BOOL)isZoomedMode;

    Swift

    class func isZoomedMode() -> Bool
  • 在 iPad 分屏模式下可获得实际运行区域的窗口大小,如需适配 iPad 分屏,建议用这个方法来代替 [UIScreen mainScreen].bounds.size

    Declaration

    Objective-C

    + (CGSize)applicationSize;

    Swift

    class func applicationSize() -> CGSize

    Return Value

    应用运行的窗口大小

UIApplication

  • 把App的主要window置灰,用于浮层弹出时,请注意要在适当时机调用resetDimmedApplicationWindow恢复到正常状态

    Declaration

    Objective-C

    + (void)dimmedApplicationWindow;

    Swift

    class func dimmedApplicationWindow()
  • 恢复对App的主要window的置灰操作,与dimmedApplicationWindow成对调用

    Declaration

    Objective-C

    + (void)resetDimmedApplicationWindow;

    Swift

    class func resetDimmedApplicationWindow()
  • 黑色的 StatusBarStyle,用于亮色背景

    Note

    在 iOS 13 以前 UIStatusBarStyleDefault 状态栏内容的颜色固定是黑色的,而在 iOS 13 UIStatusBarStyleDefault 会根据 user interface style 来决定状态栏的颜色,如果你需要一直黑色可以用 QMUIStatusBarStyleDarkContent 来代替以前 UIStatusBarStyleDefault 的写法

    Declaration

    Objective-C

    + (UIStatusBarStyle)statusBarStyleDarkContent;

    Swift

    class func statusBarStyleDarkContent() -> UIStatusBarStyle

    Return Value

    在 iOS 13 以上返回 UIStatusBarStyleDarkContent,在 iOS 12 及以下返回 UIStatusBarStyleDefault

Animation

  • 在 animationBlock 里的操作完成之后会调用 completionBlock,常用于一些不提供 completionBlock 的系统动画操作,例如 [UINavigationController pushViewController:animated:YES] 的场景,注意 UIScrollView 系列的滚动无法使用这个方法。

    Declaration

    Objective-C

    + (void)executeAnimationBlock:(nonnull void (^)(void))animationBlock
                  completionBlock:(nullable void (^)(void))completionBlock;

    Swift

    class func executeAnimationBlock(_ animationBlock: () -> Void, completionBlock: (() -> Void)? = nil)

    Parameters

    animationBlock

    要进行的带动画的操作

    completionBlock

    操作完成后的回调