很久沒寫文章了,畢竟新人就只能寫給新人的福利了,還是那句話,讓新人少走一點彎路.
談技術之前,先來說明靈感在於哪,
老規矩,上圖
首先,除了iphone4, iphone5,6,6plus機型,都是成比例的,也就是每個螢幕的寬度/高度都是相等的,所以我們可以利用這個成比例,寫以下**
/螢幕適配 /
//判斷裝置型別
#define
iphone4 ([uiscreen mainscreen].bounds.size.height == 480)
#define
iphone5 ([uiscreen instancesrespondtoselector:@selector(currentmode)] ? cgsizeequaltosize(cgsizemake(640, 1136), [[uiscreen mainscreen] currentmode].size) : no)
#define
iphone6 ([uiscreen instancesrespondtoselector:@selector(currentmode)] ? (cgsizeequaltosize(cgsizemake(750, 1334), [[uiscreen mainscreen] currentmode].size)) : no)
#define
iphone6plus ([uiscreen instancesrespondtoselector:@selector(currentmode)] ? (cgsizeequaltosize(cgsizemake(1125, 2001), [[uiscreen mainscreen] currentmode].size) || cgsizeequaltosize(cgsizemake(1242, 2208), [[uiscreen mainscreen] currentmode].size)) : no)
#define
kscreenheight
[uiscreen mainscreen]
.bounds
.size
.height
#define
kscreenwidth
[uiscreen mainscreen]
.bounds
.size
.width
#define
kwidth(r) (r)*(kscreenwidth)/320 這裡的320我是針對5s為標準適配的,如果需要其他標準可以修改
#define
kheight(r) (iphone4?(r:((r)*(kscreenheight)/568)) 這裡的568我是針對5s為標準適配的,如果需要其他標準可以修改
**簡單我就不介紹了,
以此思想,我們可以對字型下手
#define font(r) (r)*(kscreenwidth)/320.0 這裡是5s螢幕字型
#define kfont16 [uifont systemfontofsize:font(16.0f)]
效果圖如下
可以看到螢幕label的地方,我這裡只寫iphone5s的**,在iphone7跑起來以後,介面是成比例的,連同字型也是.
在ios實際專案開發中, 我們經常要適配不同尺寸的螢幕,如iphone4s,iphone5/s,iphone6/s,iphone6plus等. 在**中建立乙個控制項如:
很明顯能看出這三種螢幕的尺寸寬高比是差不多的,因此可以在5的基礎上,按比例放大來適配6和6plus的螢幕.
@property
float autosizescalex;
@property
float autosizescaley;
#define screenheight [[uiscreen mainscreen] bounds].size.height
#define screenwidth [[uiscreen mainscreen] bounds].size.width
if(screenheight > 480)else}
因為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檔案中
cg_inline cgrect
ts_cgrectmake(cgfloat x, cgfloat y, cgfloat width, cgfloat height)
當我們使用的時候直接這樣做
uiimageview *imageview = [[uiimageview alloc] initwithframe:ts_cgrectmake(100, 100, 50, 50)];
這樣我們得出的就是轉換後的座標了. 這樣,這個imageview在5,6和6plus的位置和尺寸比例都是一樣的. 媽媽再也不用擔心螢幕的適配了.
如果整個專案做完後才開始做適配的話這個方法的優勢就體現出來了,面對幾十個工程檔案,只需自定義並且替換你的cgrectmake方法,再加上storyboradautolay這個方法就瞬間完成大部分甚至全部的適配,如果遇到tableview的或者其他的手動調整一下即可.
當然這個我已經準備設計乙個類, 寫好了我會第一時間放在我的github上,方便大家的使用.
el table根據螢幕大小適配最大高度
使用elementui v2.13.2 開發過程中使用el table渲染列表,需要控制table的最大高度,達到溢位滾動的效果。參考element文件,可以使用max height屬性 table 的最大高度。合法的值為數字或者單位為 px 的高度 於是可以設定乙個具體的值,eg max heig...
C 根據螢幕大小設定窗體
根據螢幕大小設定窗體初始大小 rectangle rect system.windows.forms.systeminformation.virtualscreen rectangle rect systeminformation.workingarea this.height rect.heigh...
iOS字型根據不同螢幕尺寸適配
因為檢視使用storyboard 和 xib拖拽進來了,如果需要對不同大小的螢幕進行font 字型適配的話可以使用分類。在load 方法中 利用oc的執行時機制,對所有的 uibutton uilabel 做處理。關鍵 uibutton 按鈕的處理方式 void load id myinitwith...