我不确定如何解释这一个。我昨天向商店提交了我的一个应用程序的更新。 第一个屏幕截图是我在iPhone 3G上运行的一个特定屏幕运行的方式,运行iOS 4.2.1,从App Store下载:
下面的第二张图片是完全相同的代码,自原始提交以来没有进行任何更改,在通过Xcode连接的完全相同的设备上运行。
应用程序在我的iPhone 4上正常运行,运行iOS 5,从App Store下载。所以回顾一下:
这些不是唯一的图形不一致,但它们都与自定义UITableViewCell代码有关,除了在每个目录中按几个像素标记之外,它没有做任何事情,并且从第一天起就一直运行良好。我已经用idp-dts提交了一份报告,我正在等待他们的回复,但由于候补名单通常是一周或更长时间,我宁愿自己解决这个问题。
非常感谢任何帮助/提示/猜测!
iPhone 3G运行我的应用程序的App Store版本:
iPhone 3G运行我的应用程序的Xcode系留版本:
编辑:这听起来与此问题非常相似:Building with LLVM and any optimization causes app to crash on startup与我联系的客户使用的是第二代iPod Touch,除了使用armv6的iPhone 3G之外的唯一其他硬件
编辑2:以下是设置左侧颜色条边界的代码片段。代码中似乎没有任何可疑的东西:
- (void)layoutSubviews {
CGRect colorViewFrame = self.bounds;
colorViewFrame.size.width = 6;
colorViewFrame.origin.y += 3;
colorViewFrame.origin.x -= 1;
colorViewFrame.size.height -= 8;
colorView.frame = colorViewFrame;
...
}
答案 0 :(得分:7)
所以这是我在Build Settings下找到的:
在编译器优化中采用了一两个类是有道理的。设备上的代码调试应保持其原始状态以进行调试,并且应针对速度和效率优化发布的代码。
所以这是有趣的部分。将我的调试设置更改为最快,最小:
在Xcode中运行系留时导致问题在我的设备上发生。
在提交雷达或做出任何草率决定并向App Store提交非优化代码之前,还有什么我应该考虑调查的吗?编译器优化是否真的是布局问题的根本原因?
编辑如果优化级别是问题,为什么优化的代码在我的iPhone 4上正常运行,但在我的iPhone 3G上运行不正确?
编辑2:此问题与此答案非常相似:Building with LLVM and any optimization causes app to crash on startup
编辑3:从Apple Radar回复,这是一个众所周知的问题。将在未来版本的Xcode中修复。感谢所有帮助人员!
答案 1 :(得分:1)
我遇到了同样的问题,并找到了问题的解决方法。
我在优化和未经优化的代码上做了一些NSLog之后发现CGSize在第一次访问height参数后变得腐败。
所以这段代码在我的UITableViewCell子类layoutSubviews中:
NSLog(@"size.height %f", size.height);
NSLog(@"2nd access size.height %f", size.height);
_titleLabel.frame = CGRectMake(kLeftSpacer, kSpacerHeight, kTitleWidth ,size.height);
NSLog(@"after setFrame size.height %f", size.height);
在日志中提供以下内容:
size.height 19.000000
第二次访问size.height 56.00000
在setFrame size.height 56.00000之后
所以,我的解决方法是使用中间高度标识符:
CGFloat height = size.height;
NSLog(@"size.height %f", size.height);
_titleLabel.frame = CGRectMake(kLeftSpacer, kSpacerHeight, kTitleWidth ,height);
NSLog(@"after setFrame size.height %f", size.height);
一切都很好......
我认为不像关闭优化一样安全,但我的应用程序的其余部分似乎很好......总是最好用发布版本进行测试!
答案 2 :(得分:0)
如果要在表格视图单元格中添加和布置视图,则应将其添加到单元格的contentView
中,并在所有布局代码中使用self.contentView.bounds
而不是self.bounds
。
你需要来呼叫[super layoutSubviews]
否则会发生许多奇怪的事情。
答案 3 :(得分:0)
答案是为armv6编译添加编译器标志-mno-thumb,而不是为armv7编译添加它。
如何使用:Is there a way to compile for ARM rather than Thumb in Xcode 4?