【问题标题】:Crash while drawing a custom table view section header view绘制自定义表格视图部分标题视图时崩溃
【发布时间】:2011-12-25 13:59:41
【问题描述】:

我正在绘制一个自定义表格部分标题视图并将其传递给“tableView:viewForHeaderInSection:”方法。当表格视图尝试在屏幕上绘制自身时,我遇到了崩溃:

这可能是什么原因:-(?

崩溃日志说:

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);
}

【问题讨论】:

    标签: iphone objective-c cocoa-touch uitableview


    【解决方案1】:

    正如错误所述,您的标签之一是将其 x 或 y 原点位置设置为非数字 (NaN)。

    你可以通过输入找出哪一个:

    NSLog(@"TitleLabel: %p", self.titleLabel);
    NSLog(@"subTitleLabel: %p", self.subTitleLabel);
    

    然后将指针值(0x32e200fb)与崩溃日志进行比较。匹配的值是错误的。

    快速浏览一下,titleLabel 使用了一个常量 (myLeftRightMargin),所以我会立即查看该常量。您是否确定这被定义为数字原语?

    【讨论】:

    • 我已将常量定义为:#define myLeftRightMargin 8.0
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2011-03-14
    • 2019-09-20
    • 2018-08-12
    相关资源
    最近更新 更多