做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下载地址,如果有问题 可以在下面留言 谢谢。