日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iPhone6 和iPhone6plus 快速适配

發(fā)布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iPhone6 和iPhone6plus 快速适配 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

??


編者注:根據(jù)網(wǎng)友們的評論,文章中的方法有很大的局限性,請謹慎使用!

現(xiàn)在由于蘋果公司出了6和6Plus,讓寫蘋果程序的哥們?yōu)榱俗黾嫒莺茴^疼。用StoryBoard固然方便,但是后期做兼容要花費太多的時間和精力。
使用AutoLayout雖然會在不同尺寸的屏幕下自動布局,但是很多東西還是要自己手動修改,而且使用AutoLayout的話有一個弊病,就是無法通過代碼來修改StoryBoard上控件的尺寸和位置。
使用純代碼搭建界面又會覺得不夠直觀,要花時間調(diào)整布局,雖然方便后期做調(diào)整兼容性,但是影響開發(fā)效率。
當然個人覺得還是代碼和StoryBoard結(jié)合的方式比較方便。
先說下使用本方法的要求,首先iPhone5的界面一定要完全兼容,這樣才能完美兼容6和6Plus。
首先,我么我們要觀察一下5,6和6Plus的尺寸比例關(guān)系。發(fā)現(xiàn)了他們的關(guān)系后待會做兼容就明白了。


屏幕快照-2014-12-17-下午7.51.08-300x164.png

很明顯能看出這三種屏幕的尺寸寬高比是差不多的,因此可以在5的基礎(chǔ)上,按比例放大來兼容6和6Plus的屏幕。
在AppDelegate.h中

?

?

?

@property float autoSizeScaleX;

@property float autoSizeScaleY;


在AppDelegate.m中

?

?

#define ScreenHeight [[UIScreen mainScreen] bounds].size.height//獲取屏幕高度,兼容性測試

#define ScreenWidth [[UIScreen mainScreen] bounds].size.width//獲取屏幕寬度,兼容性測試

?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

??? AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];

?????

??? if(ScreenHeight > 480){

??????? myDelegate.autoSizeScaleX = ScreenWidth/320;

??????? myDelegate.autoSizeScaleY = ScreenHeight/568;

??? }else{

??????? myDelegate.autoSizeScaleX = 1.0;

??????? myDelegate.autoSizeScaleY = 1.0;

??? }

}


因為iPhone4s屏幕的高度是480,因此當屏幕尺寸大于iPhone4時,autoSizeScaleX和autoSizeScaleY即為當前屏幕和iPhone5尺寸的寬高比。比如,
如果是5,autoSizeScaleX=1,autoSizeScaleY=1;
如果是6,autoSizeScaleX=1.171875,autoSizeScaleY=1.17429577;
如果是6Plus,autoSizeScaleX=1.29375,autoSizeScaleY=1.2957;
現(xiàn)在我們獲取了比例關(guān)系后,先來看一下如何解決代碼設(shè)置界面時的兼容。
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)這個方法使我們常用的設(shè)置尺寸的方法,現(xiàn)在我設(shè)置了一個類似于這樣的方法。
在.m文件中

?

?


UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake1(100, 100, 50, 50)];

?

CG_INLINE CGRect//注意:這里的代碼要放在.m文件最下面的位置

CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

{

??? AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];

??? CGRect rect;

??? rect.origin.x = x * myDelegate.autoSizeScaleX; rect.origin.y = y * myDelegate.autoSizeScaleY;

??? rect.size.width = width * myDelegate.autoSizeScaleX; rect.size.height = height * myDelegate.autoSizeScaleY;

??? return rect;

}


這樣,這個btn按鈕在5,6和6Plus的位置和尺寸比例都是一樣的。
代碼兼容完之后,來看一下StoryBoard的兼容,當然,在平時的項目中我們不可能就一兩個視圖,而且每個視圖里面可定還套有很多其他視圖,如果把所有視圖的尺寸用手動輸入CGRectMake的方法來改兼容的話工作量非常大,而且容易出錯。經(jīng)過多次試驗,我想出一種能快速兼容大多數(shù)界面的方法
在AppDelegate.m中

?

?


//storyBoard view自動適配

+ (void)storyBoradAutoLay:(UIView *)allView

{

??? for (UIView *temp in allView.subviews) {

??????? temp.frame = CGRectMake1(temp.frame.origin.x, temp.frame.origin.y, temp.frame.size.width, temp.frame.size.height);

??????? for (UIView *temp1 in temp.subviews) {

??????????? temp1.frame = CGRectMake1(temp1.frame.origin.x, temp1.frame.origin.y, temp1.frame.size.width, temp1.frame.size.height);

??????? }

??? }

}

?

//修改CGRectMake

CG_INLINE CGRect

CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

{

??? AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];

??? CGRect rect;

??? rect.origin.x = x * myDelegate.autoSizeScaleX; rect.origin.y = y * myDelegate.autoSizeScaleY;

??? rect.size.width = width * myDelegate.autoSizeScaleX; rect.size.height = height * myDelegate.autoSizeScaleY;

??? return rect;

}


storyBoradAutoLay是把當前view進行兩層遍歷,把里面的UIView類型的控件的尺寸取出來,乘以對應(yīng)的比例再賦值給它的尺寸,這樣StoryBoard里的兼容就完成了。如果你的界面里嵌套的比較多的話可以多加幾層遍歷。

在繼承了UIViewController的.m文件中

?

?


#import "AppDelegate.h"

- (void)viewDidLoad{

??? [super viewDidLoad];

??? [AppDelegate storyBoradAutoLay:self.view];

}


在所有的繼承了UIViewController的文件中,都加上storyBoradAutoLay這句代碼,就能把當前的view進行兼容。
現(xiàn)在我們來看一下使用了該方法兼容的前后對比效果吧。

iPhone6兼容前

iOS-Simulator-Screen-Shot-2014年12月18日-下午7.07.47-168x300.png

iPhone6兼容后


iOS-Simulator-Screen-Shot-2014年12月18日-下午7.06.38-168x300.png

iPhone6Plus兼容前


iOS-Simulator-Screen-Shot-2014年12月18日-下午7.08.29-168x300.png

iPhone6Plus兼容后


iOS-Simulator-Screen-Shot-2014年12月18日-下午7.06.38-168x300.png

如果整個項目做完后才開始做兼容的話這個方法的優(yōu)勢就體現(xiàn)出來了,面對幾十個工程文件,只需自定義并且替換你的CGRectMake方法,再加上storyBoradAutoLay這個方法就瞬間完成大部分甚至全部的兼容。
其實還是比較建議用代碼和StoryBoard結(jié)合的方式來寫代碼,無論是從做兼容還是效率來說都是比較好的。
如果遇到tableView的或者其他的兼容改動,手動調(diào)整一下即可。

總結(jié)

以上是生活随笔為你收集整理的iPhone6 和iPhone6plus 快速适配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。