iOS如何獲取屏幕寬高、設(shè)備型號(hào)、系統(tǒng)版本信息
介紹
在我學(xué)習(xí)Android開(kāi)發(fā)的時(shí)候,覺(jué)得設(shè)備適配是件很頭疼的事情,android的設(shè)備太多了,那時(shí)就很羨慕iOS開(kāi)發(fā)的人不用操心適配的問(wèn)題,而當(dāng)我開(kāi)始學(xué)習(xí)iOS開(kāi)發(fā)后,iOS的屏幕也開(kāi)始多種多樣了起來(lái)...于是也得做適配了,sad...
之前也研究過(guò),這里把我的方法記錄下來(lái),本文介紹三個(gè)常用的設(shè)備信息獲取方式:
- 獲取屏幕的寬高。用于在設(shè)置控件位置的時(shí)候計(jì)算相對(duì)屏幕的距離
- 獲取設(shè)備的型號(hào)。5s和6+的屏幕大小相差很遠(yuǎn),相應(yīng)的控件位置、大小都需要做出調(diào)整,不然就會(huì)出現(xiàn)在6+上顯得很空曠或者在5s上顯示不全的問(wèn)題。
- 獲取系統(tǒng)版本。不同的系統(tǒng)版本有著不同的特性,舉個(gè)栗子,iOS 9以下的版本就沒(méi)有Live Photo;再舉個(gè)栗子,iOS 7以上的系統(tǒng)版本往往需要調(diào)整一下邊界
接下來(lái)詳細(xì)說(shuō)說(shuō)各自的獲取方法,其實(shí)都還比較簡(jiǎn)單。
1、獲取屏幕的寬高
屏幕的寬高是一個(gè)常常需要用到的信息,尤其是當(dāng)你用代碼寫UI時(shí)。比如當(dāng)你寫一個(gè)UILabel,設(shè)置其frame時(shí),你想要它居中,而你想為其設(shè)置的寬度為200,那怎么設(shè)置它的x值呢?就是(屏幕的寬度 - 200)/ 2了對(duì)吧,這樣就可以保證不管在什么設(shè)備上它永遠(yuǎn)是居中的。獲取屏幕寬、高的方法如下:
// 設(shè)備寬度 [UIScreen mainScreen].bounds.size.width // 設(shè)備高度 [UIScreen mainScreen].bounds.size.height
一般來(lái)說(shuō)我們?cè)趐ch文件里將其設(shè)置為宏,這樣在每個(gè)地方就都可以調(diào)用了,就不用每次都用這么長(zhǎng)一串代碼:
//設(shè)備的寬高 #define SCREENWIDTH [UIScreen mainScreen].bounds.size.width #define SCREENHEIGHT [UIScreen mainScreen].bounds.size.height
這樣在需要用的地方直接使用宏SCREENWIDTH和SCREENHEIGHT就可以了。
2、獲取設(shè)備的型號(hào)
獲取設(shè)備型號(hào)有幾種方法,這里我使用的是比較笨的方法,獲取設(shè)備的分辨率來(lái)判斷設(shè)備的型號(hào)。我們先看下面這張表:

關(guān)注設(shè)備分辨率那一列,我們可以看到幾款屏幕的設(shè)備的分辨率是不同的,因此也就可以以此為依據(jù)判斷設(shè)備型號(hào),我這里判斷了幾種當(dāng)前最常見(jiàn)的型號(hào),同樣使用了宏:
// 根據(jù)屏幕分辨率判斷設(shè)備,是則返回YES,不是返回NO #define isiPhone5or5sor5c ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO) #define isiPhone6or6s ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO) #define isiPhone6plusor6splus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)
那么我只需要判斷這幾個(gè)值哪一個(gè)是YES,就可以知道當(dāng)前是哪個(gè)型號(hào)了,如:
if (isiPhone5or5sor5c) {
NSLog(@"這是 iPhone5 或 5s 或 5c") ;
} else if (isiPhone6or6s) {
NSLog(@"這是 iPhone6 或 6s");
} else if (isiPhone6plusor6splus) {
NSLog(@"這是 iPhone6plus 或6splus");
}
這樣就可以啦。
其實(shí)相應(yīng)的iPad、iTouch等也都可以這么判斷,只要找到對(duì)應(yīng)的分辨率來(lái)判斷就好。
3、獲取系統(tǒng)版本
獲取系統(tǒng)版本同樣適用宏來(lái)方便全局調(diào)用:
// 設(shè)備的系統(tǒng)版本 #define SystemVersion ([[UIDevice currentDevice] systemVersion])
這樣你就可以獲取版本號(hào)了,可以打印出來(lái):
NSLog(@"當(dāng)前運(yùn)行系統(tǒng)為:iOS%@", SystemVersion);
在使用的時(shí)候,可以轉(zhuǎn)化為float型的數(shù)來(lái)進(jìn)行判斷,如:
if ([SystemVersion floatValue] >= 7.0)
{
……
}
常用的獲取設(shè)備信息的方法就在這里啦,希望能幫到大家~
這里是我在github的示例工程地址:https://github.com/Cloudox/GetDeviceInfoDemo,歡迎star和fork~
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Objective-C實(shí)現(xiàn)自定義的半透明導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了Objective-C實(shí)現(xiàn)自定義的半透明導(dǎo)航的相關(guān)資料,需要的朋友可以參考下2016-05-05
實(shí)例解析iOS app開(kāi)發(fā)中音頻文件播放工具類的封裝
這篇文章主要介紹了iOS app開(kāi)發(fā)中音頻文件播放工具類的封裝,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01
iOS開(kāi)發(fā)中使用FMDB來(lái)使程序連接SQLite數(shù)據(jù)庫(kù)
這篇文章主要介紹了iOS開(kāi)發(fā)中使用FMDB來(lái)使程序連接SQLite數(shù)據(jù)庫(kù),SQLite是一個(gè)簡(jiǎn)單的嵌入式數(shù)據(jù)庫(kù),非常適合輕量級(jí)使用,需要的朋友可以參考下2015-11-11
iOS開(kāi)發(fā)避免安全隱患的要點(diǎn)總結(jié)
在本篇文章里小編給各位整理了關(guān)于iOS開(kāi)發(fā)如何避免安全隱患的知識(shí)點(diǎn)總結(jié),需要的朋友們學(xué)習(xí)下。2019-07-07
iOS項(xiàng)目開(kāi)發(fā)--實(shí)現(xiàn)類似淘寶詳情頁(yè)面
本篇文章主要介紹了iOS實(shí)現(xiàn)類似淘寶詳情頁(yè)面,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11

