BDPLayout.h 3.02 KB
//
//  BDPLayout.h
//  BDPLayout
//
//  Created by jilutao on 2019/12/04.
//  Copyright © 2019年 Baidu. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "BBASplitController.h"

NS_ASSUME_NONNULL_BEGIN
/// 容器的差异化布局适配,兼容IPAD与IPHONE具有差异化布局的情况,否则无需使用该功能
@interface BDPLayout : NSObject

/// 容器竖屏差异化布局的留白边界,取整数
@property (nonatomic, assign) NSInteger portraitEdgeSpace;
/// 容器横屏差异化布局的边界,取整数
@property (nonatomic, assign) NSInteger landscapeEdgeSpace;
/// 分屏下布局的边界,取整数
@property (nonatomic, assign) NSInteger splitEdgeSpace;

/// 屏幕方向默认UIInterfaceOrientationMaskPortrait
@property (nonatomic, assign) UIInterfaceOrientationMask supportOrientation;

/// splitViewController
@property (nonatomic, weak) BBASplitController *splitController;

+ (BDPLayout *)sharedInstance;

/// 容器差异化布局的宽度
- (CGFloat)layoutWidth;

@end

/// 当前屏幕方向是否为竖屏
static inline BOOL BDPOrientationIsPortrait() {
    return UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation);
}

/// 当前是否分屏
static inline BOOL BDPIsSplitMode() {
    return [[BDPLayout sharedInstance].splitController isSplitMode];
}

/// 容器差异化布局的左边距
static inline CGFloat BDPLayoutSplitMasterWidth() {
    return [BDPLayout sharedInstance].splitController.primaryColumnWidth;
}

/// Split容器差异化布局的边距
static inline CGFloat BDPLayoutSplitMargin() {
    if (BDPOrientationIsPortrait()) {
        return [BDPLayout sharedInstance].portraitEdgeSpace;
    } else {
        if (BDPIsSplitMode()) {
            return [BDPLayout sharedInstance].splitEdgeSpace;
        }
        return [BDPLayout sharedInstance].landscapeEdgeSpace;
    }
}

/// 非Split容器差异化布局的左边距
static inline CGFloat BDPLayoutMargin() {
    if (BDPOrientationIsPortrait()) {
        return [BDPLayout sharedInstance].portraitEdgeSpace;
    } else {
        return [BDPLayout sharedInstance].landscapeEdgeSpace;
    }
}

/// 非Split容器差异化布局的左边距
__attribute__((deprecated("废弃,请使用BDPLayoutMargin")))
static inline CGFloat BDPLayoutLeftMargin() {
    return BDPLayoutMargin();
}

/// 容器差异化竖屏布局的左边距
static inline CGFloat BDPPortraitLayoutMargin() {
    return [BDPLayout sharedInstance].portraitEdgeSpace;
}
/// Split容器差异化横屏布局的左边距
static inline CGFloat BDPLandscapeLayoutSplitMargin() {
    if (BDPIsSplitMode()) {
        return [BDPLayout sharedInstance].splitEdgeSpace;
    }
    return [BDPLayout sharedInstance].landscapeEdgeSpace;
}

/// 非Split容器差异化横屏布局的左边距
static inline CGFloat BDPLandscapeLayoutMargin() {
    return [BDPLayout sharedInstance].landscapeEdgeSpace;
}

/// 支持的屏幕方向
static inline UIInterfaceOrientationMask BDPSupportOrientation() {
    return [[BDPLayout sharedInstance] supportOrientation];
}

NS_ASSUME_NONNULL_END