48 (OC)* 适配iPad和iPhone、以及横竖屏适配。
一:核心方法
1.三个方法
1.1:开始就会触发
- (void)viewWillLayoutSubviews;
1.2:开始就会触发
- (void)viewDidLayoutSubviews;
1.3:设备旋转的时候会触发。在UIScreen的bounds和size(下面方法中的参数)。按照size为主。
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator;
2:viewLayoutSubviews 触发条件
1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
二:获取设备反向
typedefNS_ENUM(NSInteger, UIDeviceOrientation) {
UIDeviceOrientationUnknown, // 0
UIDeviceOrientationPortrait, // 1:设备垂直竖向方向放置, 并且home键在下方
UIDeviceOrientationPortraitUpsideDown, // 2:设备垂直竖向方向放置, 并且home键在上方
UIDeviceOrientationLandscapeLeft, // 3:设备垂直横向方向放置, 并且home键在右方
UIDeviceOrientationLandscapeRight, // 4: 设备垂直横向方向放置, 并且home键在左方
UIDeviceOrientationFaceUp, // 5: 设备水平放置, 屏幕在上方
UIDeviceOrientationFaceDown // 6:设备水平放置, 屏幕在下方
} (TVOS不可用)
三:判断屏幕横屏/竖屏
方法一: 使用- (void)viewWillLayoutSubviews;
方法:
- (void)viewWillLayoutSubviews
{
[self shouldRotateToOrientation:(UIDeviceOrientation)[UIApplication sharedApplication].statusBarOrientation];
}
-(void)shouldRotateToOrientation:(UIDeviceOrientation)orientation
{
if (orientation == UIDeviceOrientationPortrait ||orientation ==
UIDeviceOrientationPortraitUpsideDown) { // 竖屏
} else { // 横屏
}
}
方法二:
- 使用
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
size
: 屏幕翻转后的新的尺寸;coordinator
: 屏幕翻转过程中的一些信息,比如翻转时间等;
四:代码地址:
个人小小的建议:建议把View封装起来。之后再设备变换的时候,修改自定义的view的frame。
备注: