同一个工程,为什么用iphone5的天天模拟器错误代码13能编译过,用5s和6的就会报错

iOS开发(117)
在Xcode6环境下,对于iPhone5或iPhone5s模拟器,在iOS7+运行,屏幕有黑边,但在iOS8没有问题。
原因分析如下:
Xcode6在Xcode5的基础上做了调整,并不是向下兼容的。Xcode5在启动页通过images.asset进行管理,但是到了Xcode6,苹果引入了一种新的启动页机制:LaunchScreen.xib,而这种机制不向下兼容的。Xcode6已经自动为iPhone6以上的模拟器强制使用iOS8+系统,对于iPhone6以上模拟器,不存在这个问题,对月iPhone4s模拟器,在iOS7.1下也仅仅是没有加载LaunchScreen.xib,这种苹果最古老的屏幕尺寸不存在这种情况。但对于iPhone5/5s+iOS7/7.1,由于iOS7无法兼容LaunchScreen.xib这种机制,又找不到default-568h.png文件,问题就出现了。
问题解决:
项目配置也,General有一栏App
Icons and Launch Images,其中有一项Launch Images Source,如果你遇到了问题,那么旁边显示的可能是一个按钮,Use Asset Catalog,点一下然后确定就可以了,会在项目中的Images.xcassets中生成LaunchImage,就像Xcode5中那样。此时再运行程序,已经不会再有上下的黑边问题了。但为了更好的用户体验,做张图片放进去吧。当然,在iOS8中依然会加载LaunchScreen.xib,看来至少二者是可以共存的。
问题延伸:
如果你想删掉这套启动图,仅仅是删除Images.xcassets中的LaunchImage是不行的,还要在项目配置,Build Settings中找到Asset Catalog Launch Image Set Name(搜索asset可以帮你快速定位到这项),把后面的值删掉。否则编译都通不过,会报错Images.xcassets: None of the input catalogs
contained a matching launch image set named &LaunchImage&。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8752次
积分:1196
积分:1196
排名:千里之外
原创:113篇
转载:10篇
(2)(8)(1)(6)(4)(19)(4)(3)(4)(10)(2)(2)(3)(9)(39)(9)iOS Develop(205)
问题描述:
Xcode6环境下,对iPhone5或iPhone5s模拟器,在iOS7或iOS7.1下运行,屏幕上下有黑边。在iOS8下没问题。
问题分析:
这种熟悉的场景又出现了,上一次遇到这种情景已经可以追溯到两年前,iPhone5刚刚问世的那段时间,在3.5inch屏幕上的程序如果不添加568h的default.png,在4inch屏上运行就会出现这种上下留&白&的状况。
而如今已经到了iPhone6和iPhone6Plus的时代,这种情景竟然又出现了。
其实可以发现,不只是上下留白的问题,在这种状态下Launch Screen其实根本没有加载。
原因可想而知了。
Xcode6在Xcode5的基础上,做出的一些调整,其实并不是向下兼容的。Xcode5在启动页通过images asset进行管理,而到了Xcode6,苹果引入了一种新的启动页机制:LaunchScreen.xib,而这种机制恰恰是不向下兼容的。Xcode6已经自动为iPhone6以上的模拟器强制使用iOS8+系统,iPhone 6 (7.1)这种模拟器是不存在的(至少我没有找到),因此对于iPhone 6以上的模拟器,不存在这个问题,对于iPhone 4s模拟器,在iOS7.1下也仅仅是没有加载LaunchScreen.xib,这种苹果最为古老的屏幕尺寸当然不存在留白的状况。但对于iPhone5/5s
+ iOS7/7.1,由于iOS7无法兼容LaunchScreen.xib这种机制,而又找不到对应的default-568h.png文件,问题自然就出现了。
问题解决:
在项目配置页,General下面有一栏App Icons and Launch Images,其中有一项Launch Images Source,如果你遇到了问题,那么旁边显示的可能是一个按钮,Use Asset Catalog,点一下然后确定就可以了,会在项目中的Images.xcassets中生成LaunchImage,就像Xcode5中那样。此时再运行程序,已经不会再有上下的黑边问题了。但为了更好的用户体验,做张图片放进去吧。当然,在iOS8中依然会加载LaunchScreen.xib,看来至少二者是可以共存的。
问题延伸:
如果你想删掉这套启动图,仅仅是删除Images.xcassets中的LaunchImage是不行的,还要在项目配置,Build Settings中找到Asset Catalog Launch Image Set Name(搜索asset可以帮你快速定位到这项),把后面的值删掉。否则编译都通不过,会报错Images.xcassets: None of the input catalogs contained a matching launch image set named &LaunchImage&。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:618119次
积分:6803
积分:6803
排名:第2251名
原创:68篇
转载:165篇
评论:103条
(1)(2)(3)(2)(10)(10)(1)(2)(1)(1)(3)(4)(5)(6)(8)(14)(6)(7)(6)(3)(6)(12)(16)(12)(13)(2)(7)(8)(2)(3)(1)(6)(10)(4)(15)(21)IOS版本和IPHONE5/5S/6/6Plus适配总结_iOS开发_
IOS版本和IPHONE5/5S/6/6Plus适配总结
来源:人气:368
代码固定坐标方案
今天花了一天的时间对IOS6和HONE5进行适配 [由于自己用的机器是IPHONE5,所以没出什么问题,但是在IPHONE4上就出问题了,都是IOS7版本,还有一台IPOD是IOS6版本,也出问题~ 哎,一开始没注意适配,现在得花这精力去修改~ &特总结一下,防止以后犯错误,提高工作效率,加油!]
由于习惯问题,都在视图控制器下的viewDidLoad去创建自定义的UI元素,因为IOS版本问题,所以self.view.frame也会不同,如果要实现相同的UI布局,用代码进行测试,发现以下4种情况
3.5寸IPHONE
IPHONE5,IPHONE5S设备
结论:针对有导航栏的视图控制器,IOS6系统下self.view下的subviews的Origin.y是从导航栏底部开始计算的,高度是整个屏幕高度减去20后的值为参照,IOS7系统下是从0开始计算的,高度是整个屏幕高度为参照!
适配方案探讨:
1.在每个视图控制器的viewDidLoad去判断IOS版本和IPHONE尺寸,创建不同的frame,去设置每个UI元素 [当前由于时间问题,采取这种方案,发现略显繁琐,不易维护]
2.在每个视图控制器下加入以下代码:
1 if ([[[UIDevice currentDevice] systemVersion] floatValue] &= 7) {
self.edgesForExtendedLayout = UIRectEdgeN
这样不管在IOS6还是IOS7下,元素的Origin.y都是一样的,不用再去分别设置了
然后只要控制每个元素的高度就行了,如下图:&
3.在第二种方法前提下,在每个视图控制器下重写loadView方法
1 -(void) loadView
[super loadView];
CGRect rect=
[[UIScreen mainScreen] Frame];
UIView* view=[[UIView alloc] initWithFrame:rect];
view.backgroundColor=[UIColor purpleColor];//根据项目需求,修改你自己的背景颜色
self.view=
[view release];
这样第二种方法里的高度设置都可以设置一样的,不用分别设置了~~
高度以屏幕高度减去20后的值为参照
最近遇到一些需求需要对6,6 plus以及iPad设备进行适配(也包括横竖屏的适配问题)
维护老项目(iPhone4S,iPhone5之前设备固定坐标UI布局的项目)在6和6 plus上使用:
/ios/00.html
iphone6 Plus下对应的屏幕frame
标准模式分辨率为(iPhone6的2倍),放大模式分辨率为
{{0, 0}, {414, 736}}
iphone6下对应的屏幕frame&
分辨率是750x1334
{{0, 0}, {375, 667}}
&iPad适配分辨率&
基准为768*1024
设计和开发协作参考模式:/ios/34.html
如果按照传统的技术if..else代码进行布局(主要是frame和bounds),工作量会很大,也不利于后期维护
所以想起用自动布局技术,不过悲剧的事,项目需要从iOS5系统进行编码,最终使用autoresizing技术
ios6.x AutoResiziingMask适配
对于一些需要横竖屏适配的视图,适配规则为,保留尺寸不变,位置做相应处理(左右上下边距等比例缩小或放大)
不再需要针对ios7.x之前和ios8.x之后的坐标系,对目标视图计算不同的frame
[目标视图&setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin];
适配目标:&描述性文字...&字样的UILabel边距为5 point,黄色图片矩形也是边距为5 point (不管横竖屏)
iPhone 6 plus
iPad retina&
代码截图:(xcode 6.x &ios8.1 sdk &target: ios6 )
1 -(void) testAutoresizing
//左边距20,上边距64,高度44, 位置水平居中
UIView* topView=[[UIView alloc] initWithFrame:CGRectMake(20, 64, [UIScreen mainScreen].bounds.size.width - 20 * 2, 44)];
topView.layer.borderWidth=1.0;
topView.layer.borderColor=[UIColor blackColor].CGC
CGFloat textLabelTop=(topView.frame.size.width-200)/2;
CGFloat textLabelWidth=(topView.frame.size.height-50)/2;
UILabel* textLabel=[[UILabel alloc] initWithFrame:CGRectMake(textLabelTop, textLabelWidth, 200, 50)];
[textLabel setText:@"适配"];
[textLabel setAlpha:0.5];
[textLabel setBackgroundColor:[UIColor greenColor]];
[textLabel setTextAlignment:NSTextAlignmentCenter];
[topView setBackgroundColor:[UIColor whiteColor]];
[textLabel setTextColor:[UIColor whiteColor]];
UIImageView* imageView=[[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 30, 34)];
imageView.backgroundColor=[UIColor yellowColor];
[topView addSubview:imageView];
UILabel* desLabel=[[UILabel alloc] initWithFrame:CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+5.0f, 5.0, topView.bounds.size.width-5*3-imageView.bounds.size.width, 34)];
[desLabel setBackgroundColor:[UIColor yellowColor]];
desLabel.text=@"描述性文字水电费水电费水电费时代";
[topView addSubview:desLabel];
#warning 适配 (包括横竖屏适配)
[desLabel setAutoresizesSubviews:YES];
[textLabel setAutoresizesSubviews:YES];
[topView setAutoresizesSubviews:YES];
//desLabel 左边距,上边距不变,宽度变化
[desLabel setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleWidth];
//textLabel宽度变化,左,右,上,下边距固定
[textLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin];
//topView宽度变化,左,右,上,下边距固定
[topView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin];
[topView addSubview:textLabel];
//textLabel.hidden=YES;
[self.view addSubview:topView];
masonry自动布局:
适配场景:
1.让xx距离xx左边界40pt
make.left.lessThanOrEqualTo(40);
make.left.equalTo(self.view).with.offset(40);
ios8 size class:
对iPad和iPhone不同尺寸的设备对屏幕进行抽象分类
iPad不管是横屏还是竖直方向都是w:(regular)/h:(regular) 规则/规则
iPhone竖直方向下都是w:(compact)/h:(regular) 紧凑/规则
iPhone横屏方向下是w:(compact)/h:(compact) 紧凑/紧凑
iPhone6 Plus横屏方向下是w:(regular)/h:(compact)规则/紧凑
代码中涉及到对size class的监控:
UIViewController实现UITraitEnvironment协议
storyboard自动布局操作备忘:
添加约束的过程中会看到约束的线是黄颜色,表明当前的约束还不能确定view的frame,需要继续添加,当添加完4个约束后,约束线的颜色是蓝色的,表明当前约束是正确的。
&项目在iOS8.x上和新的xcode上使用遇到的问题备忘:
ios的坐标系
iOS8.x之前的:http://blog.csdn.net/smallmuou/article/details/8238513&
ios8之后的坐标系统:window的坐标系会变的,之前的不会变
横竖屏适配关键代码:
1 UILabel*
2 UIView* windowrootV
5 //获取当前UIView屏幕方向下的尺寸
6 + (CGSize)fixedScreenSize {
CGSize screenSize = [UIScreen mainScreen].bounds.
if ((NSFoundationVersionNumber &= NSFoundationVersionNumber_iOS_7_1) && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
return CGSizeMake(screenSize.height, screenSize.width);
return screenS
18 //当前屏幕方向,水平方向为宽度
19 CGSize size= [BannerViewController fixedScreenSize];
20 CGRect rect=CGRectMake(0, 0, size.width, size.height);
21 if(NSFoundationVersionNumber &= NSFoundationVersionNumber_iOS_7_1)
CGSize temp= [UIScreen mainScreen].bounds.
rect.size.width=temp.
rect.size.height=temp.
28 windowrootView=[[UIView alloc] initWithFrame:rect];
29 windowrootView.backgroundColor=[UIColor yellowColor];
30 [[UIApplication sharedApplication].keyWindow addSubview:windowrootView];
33 [lable removeFromSuperview];
34 lable=[[UILabel alloc] initWithFrame:CGRectMake(20, 100, 200, 50)];
35 lable.text = @"深圳欢迎您深圳欢迎您";
37 [windowrootView addSubview:lable];
42 //ios7.x之前修改角度
43 if(NSFoundationVersionNumber &= NSFoundationVersionNumber_iOS_7_1)
CGAffineTransform rotate=CGAffineTransformI
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
switch (orientation) {
case UIInterfaceOrientationLandscapeLeft:
rotate= CGAffineTransformMakeRotation(-M_PI/2);
case UIInterfaceOrientationLandscapeRight:
rotate = CGAffineTransformMakeRotation(M_PI/2);
[lable setTransform:rotate];
59 //iOS8.x之后修改windowsrootView的bounds
iOS8,iPhone6,iPhone6 plus有一个放大模式,监控到的[UIScreen mainScreen].bounds会有所不一样,特别mark下
参考:http://blog.csdn.net/lvmaker/article/details/
优质网站模板主题 : 没做iphone6 的匹配,用iphone6的 模拟器运行也是全屏的?
级别: 骑士
UID: 180504
可可豆: 2672 CB
威望: 1743 点
在线时间: 515(时)
发自: Web Page
来源于&&分类
没做iphone6 的匹配,用iphone6的 模拟器运行也是全屏的?&&&
把之前的项目在iphone6 和iphone 6plus的模拟器上跑了一下,居然发现各种高度宽度大小正好,和phone5显示效果一样。
我看了下有些视图确实设置的宽度是320啊。Xcode6没有这么好吧?这下连匹配也不用做了? 总有些不放心,没有iphine6的真机。。。。 大家也是这样的吗?.
级别: 新手上路
UID: 241285
可可豆: 27 CB
威望: 22 点
在线时间: 122(时)
发自: Web Page
我今天用6和6+ 真机调试,都没问题,打印宽度都是320!但我用xcode6新建工程,然后打印,却不是320,这下搞的我不知如何解释了!
级别: 新手上路
可可豆: 31 CB
威望: 31 点
在线时间: 424(时)
发自: Web Page
没有6的启动图就是320,有就是6的大小
级别: 新手上路
可可豆: 84 CB
威望: 24 点
在线时间: 270(时)
发自: Web Page
你看的不够仔细的吧 你用6的模拟器运行的时候 仔细看下屏幕的上下是不是有几个像素的黑线&&没有适配的项目在6上运行只是单纯的放大显示
级别: 新手上路
UID: 213617
可可豆: 145 CB
威望: 110 点
在线时间: 1178(时)
发自: Web Page
回 2楼(似云悠) 的帖子
没有添加启动图&&&&6和6plus 的模拟器就会是320 ?
没个性,不签名
级别: 新手上路
可可豆: 26 CB
威望: 8 点
在线时间: 4(时)
发自: Web Page
我用iphone6测试过,可以直接用iphone5的界面,完全没有问题
关注本帖(如果有新回复会站内信通知您)
3*3+1 正确答案:10
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版

我要回帖

更多关于 天天模拟器错误代码13 的文章

 

随机推荐