真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ios純代碼屏幕適配

ios 純代碼屏幕適配

為貢山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及貢山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、貢山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

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

ios 純代碼屏幕適配

很明顯能看出這三種屏幕的尺寸寬高比是差不多的,因此可以在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;    }}

因?yàn)閕Phone4s屏幕的高度是480,因此當(dāng)屏幕尺寸大于iPhone4時(shí),autoSizeScaleX和autoSizeScaleY即為當(dāng)前屏幕和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è)置界面時(shí)的兼容。
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)這個(gè)方法使我們常用的設(shè)置尺寸的方法,現(xiàn)在我設(shè)置了一個(gè)類似于這樣的方法。
在.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;}

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

//storyBoard view自動(dòng)適配+ (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);        }    }} //修改CGRectMakeCG_INLINE CGRectCGRectMake1(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是把當(dāng)前view進(jìn)行兩層遍歷,把里面的UIView類型的控件的尺寸取出來,乘以對應(yīng)的比例再賦值給它的尺寸,這樣StoryBoard里的兼容就完成了。如果你的界面里嵌套的比較多的話可以多加幾層遍歷。

在繼承了UIViewController的.m文件中

#import "AppDelegate.h"- (void)viewDidLoad{    [super viewDidLoad];    [AppDelegate storyBoradAutoLay:self.view];}

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

iPhone6兼容前

ios 純代碼屏幕適配

iPhone6兼容后

ios 純代碼屏幕適配

iPhone6Plus兼容前

ios 純代碼屏幕適配

iPhone6Plus兼容后

ios 純代碼屏幕適配

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


網(wǎng)站欄目:ios純代碼屏幕適配
標(biāo)題來源:http://weahome.cn/article/goegsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部