1. 程式人生 > >幾行程式碼幫你輕鬆完成ios螢幕適配

幾行程式碼幫你輕鬆完成ios螢幕適配

做ios也有幾個月了,原先是做安卓的,但是來公司的時候ios正好離職,所以需要學習ios的知識,但是因為一邊要忙工作,所以也沒用很多時間去紮實學習c基礎和oc比較深層的東西,也算是一邊學習一邊學習ios開發了, 這幾天也稍微閒下來了,所以寫部落格幫助 做ios沒多久的朋友們,一起進步 在做螢幕適配的時候發現ios的第三方適配框架masonry上手沒那麼快,而且每個控制元件都要寫挺多程式碼的,所以就在網上找有沒有比較簡潔的適配程式碼呢?! 後面找到不錯的很簡潔的程式碼 在專案中也用到了,還是很不錯的 接下來給大家詳細講解下 。

#import <UIKit/UIKit.h>

@interface
AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window; @property float autoSizeScaleX; @property float autoSizeScaleY; @end
@interface AppDelegate ()
#define ScreenHeight [[UIScreen mainScreen] bounds].size.height

#define ScreenWidth [[UIScreen mainScreen] bounds].size.width
@end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate]; if(ScreenHeight > 480){ // 這裡以(iPhone6)為準 myDelegate.autoSizeScaleX
= ScreenWidth/375; myDelegate.autoSizeScaleY = ScreenHeight/667; }else{ myDelegate.autoSizeScaleX = 1.0; myDelegate.autoSizeScaleY = 1.0; } return YES; }

**這裡一定要在didFinishLaunchingWithOptions裡執行 注意
因為iPhone6螢幕的寬度和高度是375和667, 因此當螢幕尺寸大於iPhone6時, autoSizeScaleX和autoSizeScaleY即為當前螢幕和iPhone5尺寸的寬高比, 如果手機為Iphone6那麼螢幕比例為1,如果為Iphone6s,螢幕比放大,Iphone5就螢幕比縮小;
**

好了接下來我們自定義一個設定尺寸的方法

CG_INLINE CGRect
TS_CGRectMake(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;

}

這個直接寫在Macros檔案裡就好

接下來也順便貼上文字適配的程式碼 ,我們知道在所以所有螢幕裡設定的字型大小都是不變的,在Iphone6你設定一個20大小的font,在iphone5裡看起來就特別大,所以字型也要進行適配

#define MainScreenWidth [[UIScreen mainScreen] bounds].size.width


#define font(R) (R)*(MainScreenWidth)/375.0

因為美工給的標註是Iphone6的,所以

 myDelegate.autoSizeScaleX = ScreenWidth/375;

 myDelegate.autoSizeScaleY = ScreenHeight/667;和

 #define font(R) (R)*(MainScreenWidth)/375.0

都是根據iPhone6來設定的 如果美工給的標註圖是其他尺寸的話,把上面提到的三個引數全部改為對應的尺寸,好的接下來演示一下在不同螢幕適配了的效果

使用方法

設定frame TS_CGRectMake() 
self.btnForgetPassWord=[UIButton alloc]initWithFrame:TS_CGRectMake(161, 499, 54, 12);
設定字型大小 font()
 [self.btnForgetPassWord setFont:[UIFont systemFontOfSize:font(12)]];

iphone6使用效果

這裡寫圖片描述

iphone5使用效果

這裡寫圖片描述

iphone6s Plus使用效果

這裡寫圖片描述

**我們發現在三個機型上圖片都適配成功了,而且字型在Iphone5和Iphone6s plus上也進行等比例的放大和縮小了 但是這個適配也是有缺陷的 就是圖片的邊緣比較薄的話 在iphone5上偶然會出現邊緣比較虛 比如這種圖 其他裝置上正常顯示

這裡寫圖片描述

下面是Demo下載地址,如果有問題 可以在下面留言 謝謝。