iPhone6 和iPhone6plus 快速適配

2021-06-28 01:13:58 字數 3374 閱讀 9035

現在由於蘋果公司出了6和6plus,讓寫蘋果程式的哥們為了做相容很頭疼。用storyboard固然方便,但是後期做相容要花費太多的時間和精力。

使用autolayout雖然會在不同尺寸的螢幕下自動布局,但是很多東西還是要自己手動修改,而且使用autolayout的話有乙個弊病,就是無法通過**來修改storyboard上控制項的尺寸和位置。

使用純**搭建介面又會覺得不夠直觀,要花時間調整布局,雖然方便後期做調整相容性,但是影響開發效率。

當然個人覺得還是**和storyboard結合的方式比較方便。

先說下使用本方法的要求,首先iphone5的介面一定要完全相容,這樣才能完美相容6和6plus。

首先,我麼我們要觀察一下5,6和6plus的尺寸比例關係。發現了他們的關係後待會做相容就明白了。

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

@property float autosizescalex;

@property float autosizescaley;

#define screenheight [[uiscreen mainscreen] bounds].size.height//獲取螢幕高度,相容性測試

#define screenwidth [[uiscreen mainscreen] bounds].size.width//獲取螢幕寬度,相容性測試

if(screenheight > 480)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;

現在我們獲取了比例關係後,先來看一下如何解決**設定介面時的相容。

cgrectmake(cgfloat x, cgfloat y, cgfloat width, cgfloat height)這個方法使我們常用的設定尺寸的方法,現在我設定了乙個類似於這樣的方法。

在.m檔案中

uibutton *btn = [[uibutton alloc] initwithframe:cgrectmake1(100, 100, 50, 50)];

cg_inline cgrect//注意:這裡的**要放在.m檔案最下面的位置

cgrectmake1(cgfloat x, cgfloat y, cgfloat width, cgfloat height)

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;

//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)

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型別的控制項的尺寸取出來,乘以對應的比例再賦值給它的尺寸,這樣storyboard裡的相容就完成了。如果你的介面裡巢狀的比較多的話可以多加幾層遍歷。

在繼承了uiviewcontroller的.m檔案中

- (void)viewdidload{

[super viewdidload];

在所有的繼承了uiviewcontroller的檔案中,都加上storyboradautolay這句**,就能把當前的view進行相容。

現在我們來看一下使用了該方法相容的前後對比效果吧。

iphone6相容前

ios-simulator-screen-shot-2023年12月18日-下午7.07.47-168x300.png

iphone6相容後

ios-simulator-screen-shot-2023年12月18日-下午7.06.38-168x300.png

iphone6plus相容前

ios-simulator-screen-shot-2023年12月18日-下午7.08.29-168x300.png

iphone6plus相容後

ios-simulator-screen-shot-2023年12月18日-下午7.06.38-168x300.png

如果整個專案做完後才開始做相容的話這個方法的優勢就體現出來了,面對幾十個工程檔案,只需自定義並且替換你的cgrectmake方法,再加上storyboradautolay這個方法就瞬間完成大部分甚至全部的相容。

其實還是比較建議用**和storyboard結合的方式來寫**,無論是從做相容還是效率來說都是比較好的。

如果遇到tableview的或者其他的相容改動,手動調整一下即可。

iphone6以及iphone6plus適配

手頭維護的乙個老專案,因為需要從ios5.1開始支援,所以在頁面適配上基本上使用硬編碼和autoresizemask來實現iphone4 iphone5s的適配,情況看起來還算不錯。到了iphone6以及以上的機型情況就有些不同了。在補充了iphone6的default page之後,很多頁面右邊出...

iPhone6,更為完美

最新訊息稱,蘋果打算今年晚些時候在自動化生產線上生產其所有的iphone電池。這一舉動可以降低人力需求,將生產鏈資源轉移到其他方面。訊息表示,蘋果mac pro和imac已實現自動化生產,除了材料和最後的組裝,mac pro和imac的生產無需任何人力。該舉動會有助於蘋果iphone6的生產,此前訊...

iphone6螢幕適配

經新xcode6模擬器驗證 解析度為pt,畫素為真實pixel iphone5解析度320x568,畫素640x1136,2x iphone6解析度375x667,畫素750x1334,2x iphone6 plus解析度414x736,畫素1242x2208,3x,注意,在這個解析度下渲染後,影象...