------關於適配的理解------
1、什麼是適配?
適配是對不同硬件和系統軟件的適應,硬件包括屏幕顯示,處理器,內存等等(目前主要是屏幕適配,iPhone 6s新增了3D Touch功能,其他硬件功能並沒有實質性的改變),軟件主要是不同iOS系統(有些在最新系統(通常會盡量向下兼容)不再支持的方法都需要做一些判斷)。
2、為什麼要適配?
適配是為了兼容不同的設備。
3、屏幕適配主要有哪些方式?
(1)等比例適配(所有視圖按屏幕大小縮放,相對位置不變):a、純代碼;b、代碼+storyboard(不使用自動布局);c、代碼+storyboard(使用自動布局)。
(2)自由適配(主要使用自動布局):由於同一布局在不同大小的屏幕上顯示效果不一樣,如果僅僅是等比縮放,有時顯示效果差強人意;在顯示內容尺寸符合操作習慣(這個看自己咋想)的情況下,屏幕大小最大的區別是屏大顯示內容多(如浏覽新聞等,除了只有一些固定圖片、控件等的簡潔界面),a、約束內容的間距及相對大小;b、約束內容的寬高及相對位置;c、約束內容的間距、寬高。
------適配的一些方法------
情況一
(等比適配,代碼+storyboard,不使用自動布局,建議用iPhone6的尺寸布局),通過獲取屏幕尺寸,重定義CGRectMake,更新所有視圖及其子視圖的frame,完成等比適配。注意字體、圖片,以及tableView、collectionView。
1、——————AppDelegate.h添加:
+ (void)ergodicView:(UIView *)view;
2、——————AppDelegate.m添加:
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define ScreenScaleX (ScreenWidth/375)//相對於蘋果6屏幕
#define ScreenScaleY (ScreenHeight/667)
//按屏幕自動適配storyBoard所有視圖
+ (void)ergodicView:(UIView *)view{
if (view.subviews.count != 0) {
for (UIView *temp in view.subviews) {
temp.frame = CGRectMake1(temp.frame.origin.x, temp.frame.origin.y, temp.frame.size.width, temp.frame.size.height);
[self ergodicView:temp];
}
}
}
//修改CGRectMake
CG_INLINE CGRect
CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x * ScreenScaleX;
rect.origin.y = y * ScreenScaleY;
rect.size.width = width * ScreenScaleX;
rect.size.height = height * ScreenScaleY;
return rect;
}
--------------------
情況二
使用autolayout布局後,可重新設置視圖的frame。等viewDidLoad加載完後,再延遲改變視圖的frame,不延遲會被storyboard重新設置。也可以在viewDidLayoutSubviews或viewDidAppear重新設置frame