Iphone 绘制自定义表格视图节标题视图时崩溃
我正在绘制一个自定义表节标题视图,并将其传递到“tableView:ViewForHeaderSection:”方法中。当表视图试图在屏幕上绘制自身时,我遇到崩溃: 原因可能是什么:-( 事故日志显示:Iphone 绘制自定义表格视图节标题视图时崩溃,iphone,objective-c,cocoa-touch,uitableview,Iphone,Objective C,Cocoa Touch,Uitableview,我正在绘制一个自定义表节标题视图,并将其传递到“tableView:ViewForHeaderSection:”方法中。当表视图试图在屏幕上绘制自身时,我遇到崩溃: 原因可能是什么:-( 事故日志显示: Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 10]' *** Call stack at first th
Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 10]'
*** Call stack at first throw:
0 CoreFoundation 0x3611a64f __exceptionPreprocess + 114
1 libobjc.A.dylib 0x30638c5d objc_exception_throw + 24
2 CoreFoundation 0x3611a491 +[NSException raise:format:arguments:] + 68
3 CoreFoundation 0x3611a4cb +[NSException raise:format:] + 34
4 QuartzCore 0x30fd061d _ZL18CALayerSetPositionP7CALayerRKN2CA4Vec2IdEEb + 140
5 QuartzCore 0x30fd058b -[CALayer setPosition:] + 38
6 QuartzCore 0x30fd04d7 -[CALayer setFrame:] + 390
7 UIKit 0x32e1f455 -[UIView(Geometry) setFrame:] + 188
8 UIKit 0x32e200fb -[UILabel setFrame:] + 210
9 MyApp 0x003d4ed3 -[MyCustomView layoutSubviews] + 210
以下是“我的布局”子视图的代码:
- (void)layoutSubviews {
[super layoutSubviews];
CGFloat anEdgePadding = 28.0f;
CGFloat aTitleLabelWidth = [self.titleLabel.text sizeWithFont:[UIFont boldSystemFontOfSize:kFontSize16]].width;
CGFloat aSubTitleLabelWidth = [self.subTitleLabel.text sizeWithFont:[UIFont boldSystemFontOfSize:kFontSize10]].width;
self.titleLabel.frame = CGRectMake(myLeftRightMargin, -1, aTitleLabelWidth, self.bounds.size.height);
self.subTitleLabel.frame = CGRectMake(self.bounds.size.width - aSubTitleLabelWidth - anEdgePadding, 0, aSubTitleLabelWidth, self.bounds.size.height);
}
谢谢,
Abhinav正如错误所述,您的一个标签正在将其x或y原点位置设置为非数字(NaN) 您可以通过以下方式找到其中一个:
NSLog(@"TitleLabel: %p", self.titleLabel);
NSLog(@"subTitleLabel: %p", self.subTitleLabel);
然后将指针值(0x32e200fb)与崩溃日志进行比较。匹配的指针值是错误的
快速查看,标题标签使用的是一个常量(MyLeftTrightMargin),因此我会立即查看该常量。您是否确保将其定义为数字首字母?我将该常量定义为:35;定义MyLeftTrightMargin 8.0