iOS開發(fā)之適配,ios開發(fā)屏幕適配

iOS字體大小適配

在iOS開發(fā)中,有些公司對字體也有適配要求,為了讓字體美觀,所以在不同尺寸的屏幕上字體大小也要做到適配。

目前創(chuàng)新互聯(lián)公司已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計、黃驊網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

自己總結(jié)了幾種方法供大家參考。

方法一:用宏定義適配字體大?。ǜ鶕?jù)屏幕尺寸判斷)

方法二:用宏定義適配字體大?。ǜ鶕?jù)屏幕尺寸判斷)

方法三:(利用runTime給UIFont寫分類 替換系統(tǒng)自帶的方法)推薦使用這種

外部正常調(diào)用系統(tǒng)設(shè)置字體方法就行

注意:

作者鏈接:

iOS開發(fā) - iOS15導(dǎo)航欄適配(Object-C、Swift)

Swift版導(dǎo)航欄適配參考

在iOS 13中給導(dǎo)航的 UINavigationBar 增加了 scrollEdgeAppearance 屬性應(yīng)用在iOS 14及更早版本的大標(biāo)題導(dǎo)航欄上,在iOS 15中 scrollEdgeAppearance 屬性適用于所有的導(dǎo)航欄

官方解釋:描述當(dāng)關(guān)聯(lián)的UIScrollView到達(dá)與導(dǎo)航條相鄰的邊緣(導(dǎo)航條的上邊緣)時要使用的導(dǎo)航條的外觀屬性。如果沒有設(shè)置,將使用修改后的standardAppearance

scrollEdgeAppearance 與 standardAppearance 一樣同屬于 UINavigationBarAppearance 類型 父類是 UIBarAppearance

其中影響導(dǎo)航欄顏色、陰影涉及到以下屬性

因?yàn)?scrollEdgeAppearance = nil ,當(dāng)前控制器如果使用有 ScrollView 類的控件,當(dāng) ScrollView 向上滾動時 scrollEdgeAppearance 會默認(rèn)使用 standardAppearance 的屬性效果。所以 backgroundEffect 和 shadowColor 屬性需要顯式設(shè)置為nil,以防止 backgroundEffect、shadowColor 有顏色值影響導(dǎo)航欄透明效果。

下一篇:Swift版導(dǎo)航欄適配

PERFECT!

iOS開發(fā):iPhone尺寸和適配

我們通常所說的iPhone5屏幕尺寸為4英寸、iPhone6屏幕尺寸為4.7英寸,指的是顯示屏對角線的長度(diagonal)

PPI(Pixel Per Inch by diagonal):表示沿著對角線,每英寸所擁有的像素(Pixel)數(shù)目。

PPI數(shù)值越高,代表顯示屏能夠以越高的密度顯示圖像,即通常所說的分辨率越高、顆粒感越弱。

根據(jù)勾股定理

計算結(jié)果稍有出入,這是因?yàn)橄袼氐碾x散采樣有鋸齒效應(yīng)。

早期的iPhone3GS的屏幕分辨率是320*480(PPI=163),iOS繪制圖形(CGPoint/CGSize/CGRect)均以point為單位(measured in points):

后來在iPhone4中,同樣大小(3.5 inch)的屏幕采用了Retina顯示技術(shù),橫、縱向方向像素密度都被放大到2倍,像素分辨率提高到(320x2)x(480x2)= 960x640(PPI=326), 顯像分辨率提升至iPhone3GS的4倍(1個Point被渲染成1個2x2的像素矩陣)。

在同樣的邏輯坐標(biāo)系下(320x480):

為了自動適應(yīng)分辨率,系統(tǒng)會根據(jù)設(shè)備實(shí)際分辨率,自動給UIScreen.scale賦值,該屬性對開發(fā)者只讀。

在同樣的邏輯分辨率下,可以通過scale參數(shù)識別是iPhone3GS還是iPhone4(s)。以下基于nativeScale參數(shù),定義了探測機(jī)型是否為iPhone6+的宏

--------------------------------------------------------------------------------那么,同樣的分辨率和scale,如何區(qū)分機(jī)型iPhone4與4s、iPhone5與5s呢?通過[[UIDevice currentDevice] model]只能判別iPhone、iPad、iPod大類,要判斷iPhone具體機(jī)型型號,則需要通過sysctlbyname("hw.machine")獲取詳細(xì)的設(shè)備參數(shù)信息予以甄別。

iPhone3GS時代,我們?yōu)橐粋€應(yīng)用提供圖標(biāo)(或按鈕提供貼圖),只需要icon.png。針對現(xiàn)在的iPhone4~6 Retina顯示屏,需要制作額外的@2x高分辨率版本。

Phone6+在實(shí)際渲染時,downsampling/1.15(1242x2208-1080x1920),準(zhǔn)確的講,應(yīng)該是@2.46x。蘋果為方便開發(fā)者用的是@3x的素材,然后再縮放到@2.46x上。

參考: 一張圖幫你看懂 iPhone 6 Plus 屏幕分辨率

1

該方法使用系統(tǒng)緩存,適合表視圖重復(fù)加載圖像的情形。同時該API根據(jù)UIScreen的scale,自動查找包含對應(yīng)高倍圖后綴名(@2x)的文件,如果找到二倍圖,則image.scale=2.0,對應(yīng)邏輯size大小以point度量(pixel度量的一半);如果沒找到設(shè)置默認(rèn)image.scale=1.0,對應(yīng)邏輯size大小同像素尺寸。因此,

2

這組方法創(chuàng)建的UIImage對象 沒有使用系統(tǒng)緩存 ,并且指定文件名必須包含明確的高倍圖后綴。

3

//考慮? 轉(zhuǎn)屏? 的影響,按照實(shí)際屏幕方向(UIDevice ?Orientation)的寬高

//不考慮轉(zhuǎn)屏的影響,只取豎屏(UIDevice OrientationPortrait)的寬高

待續(xù)

iOS開發(fā)技巧(OC版):關(guān)于iOS11適配的一些坑

在iOS11以前, 自定義UIViewController時, 從來沒有考慮過topLayoutGuide和bottomLayoutGuide這兩個屬性.但是在iOS11出來之后,這兩個屬性被廢棄,取而代之的就是safeArea的概念,safeArea是描述你的視圖部分不被任何內(nèi)容遮擋的方法。 它提供兩種方式:safeAreaInsets或safeAreaLayoutGuide來提供給你safeArea的參照值,即 insets 或者 layout guide。 safeArea區(qū)域如圖所示:

在除了iPhone X以外的型號手機(jī)上, UINavigationController 就是 topLayoutGuide區(qū)域. UITabBarController就是bottomLayoutGuide.但是這兩個屬性在iOS11已經(jīng)被取代了. 取而代之的就是safeArea區(qū)域(iPhone X圖區(qū)域4部分)

當(dāng)我們自定義一個UIViewController, 內(nèi)部嵌套了UINavigationController 或者UITabBarController的時候. 運(yùn)行程序會出現(xiàn)以下錯誤:

原因是少了:

具體是為什么,沒有細(xì)研究.不過解決辦法如下:

因?yàn)槲沂莿?chuàng)建的空項目所以只有LaunchScreen.storyboard..如果你的項目里還有Main.storyboard,那么 你需要把第四個勾勾也去掉.

區(qū)域一: 高度30

區(qū)域二:高度14

區(qū)域三:高度44

區(qū)域五:高度49

區(qū)域六:高度14

區(qū)域七:高度20

更新iOS11以后, UITabBarController上的圖標(biāo)文字由原來的垂直放置, 變成水平放置

iPhone X 橫豎屏在尺寸上有很多細(xì)微的差別.

我們打印UINavigationController ?navigationBar的時候發(fā)現(xiàn)他的高度為44.也就是上圖綠色區(qū)域.但是在實(shí)際顯示的時候確實(shí)紅色區(qū)域,高度為32.整個高度向上12.也就是藍(lán)色區(qū)域.

我們打印UITabBarController? tabBar的時候發(fā)現(xiàn)他的高度為32,就是橘色區(qū)域,紅色區(qū)域?yàn)楣δ軈^(qū),高度為21.我們是何止tabBar顏色的時,包括橘色區(qū)和紅色區(qū).

待更新

解決方案: 準(zhǔn)備一張尺寸:1125 * 2436的啟動圖片,? 添加到Assret中

解決方案: 通過改變按鈕的 contentEdgeInsets和imageEdgeInsets的值成功改變了按鈕的偏移問題,單獨(dú)設(shè)置contentEdgeInsets也可達(dá)到一定的效果。

解決方案:iOS11棄用了automaticallyAdjustsScrollViewInsets屬性,新增contentInsetAdjustmentBehavior來替代它

- (void)createView:(BOOL)useForRendering showRightAway:(BOOL)showRightAway;

{

if(_view == nil)

{

? ? NSString *deviceVersion = [self getDeviceVersion];

? ? if ([deviceVersion isEqualToString:@"iPhone10,3"] || [deviceVersion isEqualToString:@"iPhone10,6"])

? ? {

? ? ? ? CGRect bounds = CGRectMake(34, 0, 744, 375);

? ? ? ? _window? = [[UIWindow alloc] initWithFrame:bounds];

? ? }

? ? else

? ? {

? ? ? ? _window = [[UIWindow alloc] initWithFrame: _screen.bounds];

? ? }

? _window.screen = _screen;

? if(_screen == [UIScreen mainScreen])

? ? {

? ? ? ?_view = [[GetAppController() init] unityView];

? ? ? ? NSAssert([_view isKindOfClass:[UnityView class]], @"You MUST use UnityView subclass as unity view");

? ? }

? ? else

? ? {

? ? ? ? _view = [(useForRendering ? [UnityRenderingView alloc] : [UIView alloc]) initWithFrame: _screen.bounds];

? ? }

? _view.contentScaleFactor = UnityScreenScaleFactor(self.screen);

? ? [self updateScreenSize];

? if(showRightAway)

? ? {

? ? ? ? [_window addSubview:_view];

? ? ? ? [_window makeKeyAndVisible];

? ? }

}

}

- (NSString*)getDeviceVersion

{

struct utsname systemInfo;

uname(systemInfo);

NSString *deviceVersion = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

NSLog(@"添加獲取手機(jī)型號方法 ++ %@", deviceVersion);

return deviceVersion;

}

- (void)updateScreenSize

{

CGSize layerSize? ? = _view.layer.bounds.size;

NSString *deviceVersion = [self getDeviceVersion];

if ([deviceVersion isEqualToString:@"iPhone10,3"] || [deviceVersion isEqualToString:@"iPhone10,6"])

{

? ? layerSize = CGSizeMake(744, 375);

}

CGFloat scale? ? ? = UnityScreenScaleFactor(_screen);

_screenSize = CGSizeMake(layerSize.width * scale, layerSize.height * scale);

}

當(dāng)前標(biāo)題:iOS開發(fā)之適配,ios開發(fā)屏幕適配
網(wǎng)頁URL:http://muchs.cn/article16/phgigg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、外貿(mào)網(wǎng)站建設(shè)、微信小程序、虛擬主機(jī)、面包屑導(dǎo)航、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名