【问题标题】:IOS8 - [UIlabel sizeToFit] causes EXC_BAD_ACCESS KERN_INVALID_ADDRESS crashIOS8 - [UIlabel sizeToFit] 导致 EXC_BAD_ACCESS KERN_INVALID_ADDRESS 崩溃
【发布时间】:2014-12-15 04:48:14
【问题描述】:

我们的用户在以下方法中经常遇到崩溃。崩溃总是发生在以下行之一:[lbl sizeToFit]lbl 变量被重新初始化和重用。据我了解,这不会导致任何问题)。

这些崩溃只发生在 iOS8 上(同样的方法在 ios7 上使用了很长时间,没有任何问题)。我无法自己重现这次崩溃。 目前,我唯一的线索来自“sizeToFit”苹果文档:

..在某些情况下,如果视图没有超级视图,它可能会根据屏幕边界调整自身大小。因此,如果您希望给定视图根据其父视图调整自身大小,则应在调用此方法之前将其添加到父视图。

但是,我不明白这会如何产生错误的内存引用。

-(void)setUpHeaders:(NSInteger)fortype{
    headers = [NSMutableArray array];
    if(fortype == GROUP_BY_TIME){

    for(int i=0;i<4;i++){
        UIView* header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 68)];
        header.backgroundColor = [UIColor whiteColor];
        [headers addObject:header];
    }

    int today = (int)[NSDate dayOfTheWeekOfDate:[NSDate date]];
    int firstDayOfTheWeek = (int)[defaults integerForKey:FIRST_DAY_IF_THE_WEEK_KEY];
    NSString* restOfTheWeek = nil;
    if(today == ((firstDayOfTheWeek + 4) % 7) + 1) restOfTheWeek = MyLocalizedString(@"THE COMING WEEK", @"THE COMING WEEK") ;
    else if(today == ((firstDayOfTheWeek + 5) % 7) + 1) restOfTheWeek = MyLocalizedString(@"REST OF NEXT WEEK", @"REST OF NEXT WEEK") ;
    else restOfTheWeek = MyLocalizedString(@"REST OF THE WEEK", @"REST OF THE WEEK") ;

    UILabel* lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 38, 300, 30)];
    lbl.tag = 22;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:MyLocalizedString(@"TODAY", @"TODAY") ];
    [lbl sizeToFit];
    [[headers objectAtIndex:0] addSubview:lbl];

    lbl = [[UILabel alloc] initWithFrame:CGRectMake([MyLocalizedString(@"TODAY", @"TODAY") sizeWithFont:[UIFont fontWithName:@"Volkswagen-Serial-Medium-Regular" size:21]].width + 15, 41, 300, 30)];
    lbl.tag = 2;
    lbl.font = [UIFont fontWithName:@"Volkswagen-Regular" size:19];
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
    [lbl setText:[NSString stringWithFormat:@"  %@, %@ %d  ",[[[NSLocale currentLocale] localeIdentifier] containSubString:@"he"] ? [[[NSDate date] dayOfTheWeekString] uppercaseString] : [[[NSDate date] threeLetterDayOfTheWeekString] uppercaseString],[NSDate abbriviatedMonthForDate:[NSDate date]],(int)[components day]]];
    lbl.textAlignment = NSTextAlignmentCenter;
    [lbl sizeToFit];
    [[headers objectAtIndex:0] addSubview:lbl];

    UIImageView *img;
    img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 67, 320, 1)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [[headers objectAtIndex:0] addSubview:img];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(lbl.frame.origin.x+2, 40, 1, 19)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 33;
    [[headers objectAtIndex:0] addSubview:img];

    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 38, 300, 30)];
    lbl.tag = 22;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:MyLocalizedString(@"TOMORROW", @"TOMORROW")];
    [lbl sizeToFit];
    [[headers objectAtIndex:1] addSubview:lbl];

    lbl = [[UILabel alloc] initWithFrame:CGRectMake([MyLocalizedString(@"TOMORROW", @"TOMORROW") sizeWithFont:[UIFont fontWithName:@"Volkswagen-Serial-Medium-Regular" size:21]].width + 15, 41, 200, 30)];
    lbl.tag = 2;
    lbl.font = [UIFont fontWithName:@"Volkswagen-Regular" size:19];
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate dateWithTimeIntervalSinceNow:86400]];
    [lbl setText:[NSString stringWithFormat:@"  %@, %@ %d  ",[[[NSLocale currentLocale] localeIdentifier] containSubString:@"he"] ? [[[[NSDate date] dateByAddingDays:1] dayOfTheWeekString] uppercaseString] : [[[[NSDate date] dateByAddingDays:1] threeLetterDayOfTheWeekString] uppercaseString],[NSDate abbriviatedMonthForDate:[[NSDate date] dateByAddingDays:1]],(int)[components day]]];
    lbl.textAlignment = NSTextAlignmentCenter;

    [lbl sizeToFit];
    [[headers objectAtIndex:1] addSubview:lbl];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 67, 320, 1)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [[headers objectAtIndex:1] addSubview:img];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(lbl.frame.origin.x+2, 40, 1, 19)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 33;
    [[headers objectAtIndex:1] addSubview:img];

    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 38, 300, 30)];
    lbl.tag = 2;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:restOfTheWeek];
    [[headers objectAtIndex:2] addSubview:lbl];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 67, 320, 1)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [[headers objectAtIndex:2] addSubview:img];

    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 38, 300, 30)];
    lbl.tag = 2;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:MyLocalizedString(@"LATER", @"LATER")];
    [[headers objectAtIndex:3] addSubview:lbl];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 67, 320, 1)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [[headers objectAtIndex:3] addSubview:img];

    lbl = (UILabel*)[[headers objectAtIndex:0] viewWithTag:2];
    todayWeather = [[UIImageView alloc] initWithFrame:CGRectMake(lbl.frame.size.width + lbl.frame.origin.x-5, 38, 30, 25)];
    [[headers objectAtIndex:0] addSubview:todayWeather];

    lbl = (UILabel*)[[headers objectAtIndex:1] viewWithTag:2];
    tomorrowWeather = [[UIImageView alloc] initWithFrame:CGRectMake(lbl.frame.size.width + lbl.frame.origin.x-5, 38, 30, 25)];
    [[headers objectAtIndex:1] addSubview:tomorrowWeather];

    [self gotWeather];

}
else{
    NSMutableArray* labels = [[self getLabels] valueForKey:@"values"];

    CGRect headerFrame, labelFrame, seperatorFrame;
    if ([defaults integerForKey:DISPLAY_TYPE]==DisplayTypeNotes) {
        headerFrame = CGRectMake(0, 0, 320, 60);
         labelFrame = CGRectMake(10, 30, 300, 30);
        seperatorFrame = CGRectMake(0, 59, 320, 1);
    }else{
        headerFrame = CGRectMake(0, 0, 320, 68);
        labelFrame = CGRectMake(10, 38, 300, 30);
        seperatorFrame = CGRectMake(0, 67, 320, 1);

    }


    for(int i=0;i<[labels count];i++){
        UIView* header = [[UIView alloc] initWithFrame:headerFrame];
        header.backgroundColor = [UIColor whiteColor];

        UILabel* lbl = [[UILabel alloc] initWithFrame:labelFrame];
        lbl.tag = 2;
        lbl.font = XX_LARGE_VOLKS_FONT;
        [lbl setBackgroundColor:[UIColor clearColor]];
        [lbl setTextColor:[UIColor darkGrayColor]];
        [lbl setText:[labels objectAtIndex:i]];
        [header addSubview:lbl];

        UIImageView *img;
        img = [[UIImageView alloc] initWithFrame:seperatorFrame];
        [img setBackgroundColor:[UIColor darkGrayColor]];
        img.alpha = 0.5;
        img.tag = 3;
        [header addSubview:img];

        [header bringSubviewToFront:lbl];

        [headers addObject:header];
    }
    //add aditonale header for unlabeled tasks\notes    
    UIView* header = [[UIView alloc] initWithFrame:headerFrame];
    header.backgroundColor = [UIColor whiteColor];

    UILabel* lbl = [[UILabel alloc] initWithFrame:labelFrame];
    lbl.tag = 2;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:MyLocalizedString(@"Not Labeled", @"Not Labeled")];
    [header addSubview:lbl];

    UIImageView *img;
    img = [[UIImageView alloc] initWithFrame:seperatorFrame];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [header addSubview:img];

    [headers insertObject:header atIndex:0];

  }


}

Thread : Crashed: com.apple.main-thread
0  UIKit                          0x000000018c4f22a0 -[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:] + 640
1  UIKit                          0x000000018c4f228c -[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:] + 620
2  QuartzCore                     0x000000018bb80198 CA::Layer::set_bounds(CA::Rect const&, bool) + 408
3  QuartzCore                     0x000000018bb7ff78 -[CALayer setBounds:] + 104
4  UIKit                          0x000000018c70fa50 -[_UILabelLayer setBounds:] + 56
5  QuartzCore                     0x000000018bb80c58 -[CALayer setFrame:] + 488
6  UIKit                          0x000000018c70f9e4 -[_UILabelLayer setFrame:] + 56
7  UIKit                          0x000000018c22de0c -[UIView(Geometry) setFrame:] + 292
8  UIKit                          0x000000018c23d69c -[UILabel setFrame:] + 140
9  UIKit                          0x000000018c23ea88 -[UIView(Geometry) sizeToFit] + 248
10 24me                           0x00000001001e292c -[ViewController setUpHeaders:] (ViewController.m:3412)
11 24me                           0x00000001001dfcac -[ViewController groupByTime] (ViewController.m:3146)
12 24me                           0x00000001001df6a0 -[ViewController group] (ViewController.m:3071)
13 Foundation                     0x0000000188970ea8 __NSFireDelayedPerform + 424
14 CoreFoundation                 0x0000000187a6a210 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28
15 CoreFoundation                 0x0000000187a69ec0 __CFRunLoopDoTimer + 888
16 CoreFoundation                 0x0000000187a6790c __CFRunLoopRun + 1372
17 CoreFoundation                 0x0000000187995664 CFRunLoopRunSpecific + 396
18 GraphicsServices               0x0000000190acf5a4 GSEventRunModal + 168
19 UIKit                          0x000000018c29a4f8 UIApplicationMain + 1488
20 24me                           0x00000001000642bc main (main.m:16)
21 libdyld.dylib                  0x000000019875ea08 start + 4

【问题讨论】:

  • 在 iOS8 中遇到与 sizeToFit 类似的问题:EXC_BAD_ACCESS (code=2, address=x52)
  • 还有其他关于这个的发现吗?
  • 您是否尝试过确保它在主线程上运行?我确定我最近遇到了类似的问题,但不是 100%,所以不想发布作为答案。
  • 您是否考虑过将 addSubview 和 sizeToFit 交换为关注者?然后它会匹配苹果在文档中所说的内容。 [[headers objectAtIndex:0] addSubview:lbl]; [lbl sizeToFit];至于EXC_BAD_ACCESS,大部分苹果代码仍然运行MRC(pre-ARC),所以很容易运行int EXC_BAD_ACCESS,因为分配指针。
  • 如果您的应用程序是多线程的,您可以尝试使用此工具来检测您的代码是否使用辅助线程中的 UIKit。如果确实如此,那么您将准确地知道在哪个时刻,您可以解决该问题。 gist.github.com/steipete/5664345

标签: objective-c ios8 uilabel exc-bad-access sizetofit


【解决方案1】:

我修改了您的一些代码并添加了注释。注意突出显示的部分。

-(void)setUpHeaders:(NSInteger)fortype{
    headers = [NSMutableArray array];
    if(fortype == GROUP_BY_TIME){

    for(int i=0;i<4;i++){
        UIView* header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 68)];
        header.backgroundColor = [UIColor whiteColor];
        [headers addObject:header];
    }

    int today = (int)[NSDate dayOfTheWeekOfDate:[NSDate date]];
    int firstDayOfTheWeek = (int)[defaults integerForKey:FIRST_DAY_IF_THE_WEEK_KEY];
    NSString* restOfTheWeek = nil;
    if(today == ((firstDayOfTheWeek + 4) % 7) + 1) restOfTheWeek = MyLocalizedString(@"THE COMING WEEK", @"THE COMING WEEK") ;
    else if(today == ((firstDayOfTheWeek + 5) % 7) + 1) restOfTheWeek = MyLocalizedString(@"REST OF NEXT WEEK", @"REST OF NEXT WEEK") ;
    else restOfTheWeek = MyLocalizedString(@"REST OF THE WEEK", @"REST OF THE WEEK") ;

    UILabel* lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 38, 300, 30)];
    lbl.tag = 22;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:MyLocalizedString(@"TODAY", @"TODAY") ];

[[headers objectAtIndex:0] addSubview:lbl]; // 注意这部分 [lbl sizeToFit]; // 总是在调用 'sizeToFit' 之前将视图添加到其父级,否则会崩溃

    lbl = [[UILabel alloc] initWithFrame:CGRectMake([MyLocalizedString(@"TODAY", @"TODAY") sizeWithFont:[UIFont fontWithName:@"Volkswagen-Serial-Medium-Regular" size:21]].width + 15, 41, 300, 30)];
    lbl.tag = 2;
    lbl.font = [UIFont fontWithName:@"Volkswagen-Regular" size:19];
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
    [lbl setText:[NSString stringWithFormat:@"  %@, %@ %d  ",[[[NSLocale currentLocale] localeIdentifier] containSubString:@"he"] ? [[[NSDate date] dayOfTheWeekString] uppercaseString] : [[[NSDate date] threeLetterDayOfTheWeekString] uppercaseString],[NSDate abbriviatedMonthForDate:[NSDate date]],(int)[components day]]];
    lbl.textAlignment = NSTextAlignmentCenter;

[[headers objectAtIndex:0] addSubview:lbl]; // 注意这部分 [lbl sizeToFit]; // 总是在调用 'sizeToFit' 之前将视图添加到其父级,否则会崩溃

    UIImageView *img;
    img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 67, 320, 1)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [[headers objectAtIndex:0] addSubview:img];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(lbl.frame.origin.x+2, 40, 1, 19)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 33;
    [[headers objectAtIndex:0] addSubview:img];

    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 38, 300, 30)];
    lbl.tag = 22;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:MyLocalizedString(@"TOMORROW", @"TOMORROW")];

[[headers objectAtIndex:1] addSubview:lbl]; // 注意这部分 [lbl sizeToFit]; // 总是在调用 'sizeToFit' 之前将视图添加到其父级,否则会崩溃

    lbl = [[UILabel alloc] initWithFrame:CGRectMake([MyLocalizedString(@"TOMORROW", @"TOMORROW") sizeWithFont:[UIFont fontWithName:@"Volkswagen-Serial-Medium-Regular" size:21]].width + 15, 41, 200, 30)];
    lbl.tag = 2;
    lbl.font = [UIFont fontWithName:@"Volkswagen-Regular" size:19];
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate dateWithTimeIntervalSinceNow:86400]];
    [lbl setText:[NSString stringWithFormat:@"  %@, %@ %d  ",[[[NSLocale currentLocale] localeIdentifier] containSubString:@"he"] ? [[[[NSDate date] dateByAddingDays:1] dayOfTheWeekString] uppercaseString] : [[[[NSDate date] dateByAddingDays:1] threeLetterDayOfTheWeekString] uppercaseString],[NSDate abbriviatedMonthForDate:[[NSDate date] dateByAddingDays:1]],(int)[components day]]];
    lbl.textAlignment = NSTextAlignmentCenter;

[[headers objectAtIndex:1] addSubview:lbl]; // 注意这部分 [lbl sizeToFit]; // 总是在调用 'sizeToFit' 之前将视图添加到其父级,否则会崩溃

    img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 67, 320, 1)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [[headers objectAtIndex:1] addSubview:img];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(lbl.frame.origin.x+2, 40, 1, 19)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 33;
    [[headers objectAtIndex:1] addSubview:img];

    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 38, 300, 30)];
    lbl.tag = 2;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:restOfTheWeek];

    [[headers objectAtIndex:2] addSubview:lbl];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 67, 320, 1)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [[headers objectAtIndex:2] addSubview:img];

    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 38, 300, 30)];
    lbl.tag = 2;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:MyLocalizedString(@"LATER", @"LATER")];
    [[headers objectAtIndex:3] addSubview:lbl];

    img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 67, 320, 1)];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [[headers objectAtIndex:3] addSubview:img];

    lbl = (UILabel*)[[headers objectAtIndex:0] viewWithTag:2];
    todayWeather = [[UIImageView alloc] initWithFrame:CGRectMake(lbl.frame.size.width + lbl.frame.origin.x-5, 38, 30, 25)];
    [[headers objectAtIndex:0] addSubview:todayWeather];

    lbl = (UILabel*)[[headers objectAtIndex:1] viewWithTag:2];
    tomorrowWeather = [[UIImageView alloc] initWithFrame:CGRectMake(lbl.frame.size.width + lbl.frame.origin.x-5, 38, 30, 25)];
    [[headers objectAtIndex:1] addSubview:tomorrowWeather];

    [self gotWeather];

}
else{
    NSMutableArray* labels = [[self getLabels] valueForKey:@"values"];

    CGRect headerFrame, labelFrame, seperatorFrame;
    if ([defaults integerForKey:DISPLAY_TYPE]==DisplayTypeNotes) {
        headerFrame = CGRectMake(0, 0, 320, 60);
         labelFrame = CGRectMake(10, 30, 300, 30);
        seperatorFrame = CGRectMake(0, 59, 320, 1);
    }else{
        headerFrame = CGRectMake(0, 0, 320, 68);
        labelFrame = CGRectMake(10, 38, 300, 30);
        seperatorFrame = CGRectMake(0, 67, 320, 1);

    }


    for(int i=0;i<[labels count];i++){
        UIView* header = [[UIView alloc] initWithFrame:headerFrame];
        header.backgroundColor = [UIColor whiteColor];

        UILabel* lbl = [[UILabel alloc] initWithFrame:labelFrame];
        lbl.tag = 2;
        lbl.font = XX_LARGE_VOLKS_FONT;
        [lbl setBackgroundColor:[UIColor clearColor]];
        [lbl setTextColor:[UIColor darkGrayColor]];
        [lbl setText:[labels objectAtIndex:i]];
        [header addSubview:lbl];

        UIImageView *img;
        img = [[UIImageView alloc] initWithFrame:seperatorFrame];
        [img setBackgroundColor:[UIColor darkGrayColor]];
        img.alpha = 0.5;
        img.tag = 3;
        [header addSubview:img];

        [header bringSubviewToFront:lbl];

        [headers addObject:header];
    }
    //add aditonale header for unlabeled tasks\notes    
    UIView* header = [[UIView alloc] initWithFrame:headerFrame];
    header.backgroundColor = [UIColor whiteColor];

    UILabel* lbl = [[UILabel alloc] initWithFrame:labelFrame];
    lbl.tag = 2;
    lbl.font = XX_LARGE_VOLKS_FONT;
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor darkGrayColor]];
    [lbl setText:MyLocalizedString(@"Not Labeled", @"Not Labeled")];
    [header addSubview:lbl];

    UIImageView *img;
    img = [[UIImageView alloc] initWithFrame:seperatorFrame];
    [img setBackgroundColor:[UIColor darkGrayColor]];
    img.alpha = 0.5;
    img.tag = 3;
    [header addSubview:img];

    [headers insertObject:header atIndex:0];

  }
}

【讨论】:

    猜你喜欢
    • 2017-04-02
    • 2023-03-23
    • 1970-01-01
    • 2021-09-29
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2014-07-13
    相关资源
    最近更新 更多