现在的位置: 首页 > 综合 > 正文

ios老版本通过autoresizing简单适配iphone5

2013年05月30日 ⁄ 综合 ⁄ 共 2660字 ⁄ 字号 评论关闭

今天打开已经上线的APP源码,发现Xcode检测出几个错误,简单修改一下就ok了。

有一个类库值得说一下:libxml2.2.7.3.dylib 这个库文件已经没有了,我们需要在项目的build Phases中的库文件删除,取而代之的是:libxml2.2.dylib,找到后导入即可。

接下来还有一个警告:

貌似是让我们支持4.0屏幕的尺寸,点击警告,弹出:

点击Add后,发现项目下多了一个Default-568h@2x.png(640X1136)尺寸的黑色图片,那么这个图片是做什么用的?

旧应用要与4英寸屏幕进行适配,需要创建一张Default-568h@2x.png图片,系统根据是否有此资源来识别是否支持4英寸屏幕。

也就是说,我们如果不导入这张图片,系统会默认我们不支持4寸屏幕,那么在iphone5上运行APP,会发现屏幕内上下两条黑边,话说也算是不失真吧,但是总需要办法来适配的,黑边不是个办法,当我们导入这张图片后,系统会认为支持4寸屏幕,编译再次运行,会发现上下的黑边消失了!

可,接而带来的是,很多页面的布局和组件乱了(由于view的高度改变了),如下图所示:

背景图片拉伸了,而组件还在之前的位置固定着,这可不行,实际上,最好的解决办法是:

为iPhone5增加一个新的xib,重新布局UI,这样子才能根据iPhone5屏幕的分辨率来进行UI设计,也是最好的解决方法。但是这种方法耗费的时间成本太大。

接下来,我要说一个办法,可以简单的实现还原之前ui布局,无需增加多余的xib。

如果你使用了Storyboard或是xib来做视图界面,在view的属性中可以看到

上图是我文本输入框之前的autosizing属性,顶部和左边固定,所以直接导致了尺寸边长后,它还是固定在之前的位置。

我们先来看看上下左右的缩进,虚线表示按比例缩进,实线表示按于边界距离固定缩进。
中间的横向箭头如果为实线,则表示当前的view的宽度和其superView的宽度保持比例缩放;如果是虚线,则表示当前view的宽度保持不变。(相当于等比扩大,缩小组件)
中间的纵向箭头如果为实线,则表示当前的view的高度和其superView的高度保持比例缩放;如果是虚线,则表示当前view的高度保持不变。

当我们导入了Default-568h@2x.png图片后,系统会将controller里面的view自动拉伸到iPhone5的分辨率。所以,我们不变xib的话,对于view中的subviews,则要修改其autosizing的属性,以保证当view拉伸的时候,这些subviews也能跟着“动”起来。

如上图所示,我把刚才登录界面所有组件的autosizing属性的Top改成虚线,保存再运行:

发现没问题了吧?整体被拉伸了,虽然这样的适配有些不好,但是对于有些界面而言,这是最简单的办法,拉伸的不多,就没问题,其余的界面组件也可以效仿这个方法,如果有自定义的view或是没有使用xib或是storyboard该如何设置这个属性呢?

通过代码来设置autosizing的属性。autosizing有六种属性可以设置,分别如下:

UIViewAutoresizingFlexibleTopMargin:与superView上边界保持动态距离(按比例)

UIViewAutoresizingFlexibleBottomMargin:与superView下边界保持动态距离(按比例)

UIViewAutoresizingFlexibleLeftMargin:与superView左边界保持动态距离(按比例)

UIViewAutoresizingFlexibleRightMargin:与superView右边界保持动态距离(按比例)

UIViewAutoresizingFlexibleWidth:与superView宽度成比例

UIViewAutoresizingFlexibleHeight:与superView高度成比例

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

iphone5的View为568(320X568),减去Nav(44)+任务栏(20),为504,相比iphone4s及以前版本的480(320X480),减去Nav+任务栏,为416,高出88(差别)。

如何代码里判断是否为iphone5的设备呢?

定义宏:

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

view初始化:

view.frame = CGRectMake(0, 0, 320, 416+(iphone5?88:0))

(2).Controller初始化:

ViewController *viewcontrller = [[AViewController alloc] initWithNibName:(iPhone5?@"ONEViewController-5":@"NOTHERViewController") bundle:nil];

总结:
1.XIB修改:
(1).View、Tableview等界面,直接修改Autosizing属性,使其上下拉伸。
  (2).部分无法修改的View(如view内增加了2个固定大小的view),需要创建一个新的XIB文件,添加View并在Simulated Metrics中设置Size为Retina 4 Full Screen,然后根据固定的位置重新布局。

(3).UITableView默认分组表背景如果需要改为白色,需要去掉BackgroundView

(4).旋转需要修改CGRect的X。

(5).如果弹出retina模拟器无发显示Home按钮的时候,home快捷键:shift+command+H。也可以改变模拟器的显示比例,快捷键:command+1(2,3)

抱歉!评论已关闭.