【问题标题】:UICollectionView does not return the cells correctlyUICollectionView 没有正确返回单元格
【发布时间】:2026-02-12 13:50:02
【问题描述】:

我正在创建一个带有 collectionView 的日历......到目前为止,我完美地获得了所有的 WEEKDAY,但我在数字天数方面遇到了问题。 collectionView 总是返回 31 天而不检查该月是包含 30 天还是 31 天.. 我哪里错了?一些疏忽的错误?你能帮助我吗?这是我用来获取日历的代码

+(NSInteger)dayOfMonthFromDate:(NSDate *)date {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
    NSInteger numberOfDayInMonth = range.length;
    return numberOfDayInMonth;
}

+(void)buildSmartCalendarDayWithWeekArray:(NSMutableArray *)week andDay:(NSMutableArray *)day {

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *now = [NSDate date];

    /***** YEAR ****/
    NSInteger year = [calendar component:NSCalendarUnitYear fromDate:now];

    /**** MONTH ****/
    NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:now];


    NSDateComponents *components = [[NSDateComponents alloc] init];
    components.day = 1;
    components.month = month+4;
    components.year = year;

    NSDate *date = [calendar dateFromComponents:components];
    NSDateComponents *compWeek = [calendar components:NSCalendarUnitWeekday fromDate:date];

    NSInteger weekDay = [compWeek weekday];

    /******* Numero di giorni del mese in corso *******/
    /*************************************************/
    NSInteger numberOfDay = [KPSmallCalendarDayData dayOfMonthFromDate:[NSDate date]];

    //------------------------------------------------------------------//
    /******* Recupera in quale giorno siamo *******/
    /*************************************************/
    NSUInteger todayWeekDay = weekDay-1;

    /******* Crea un ciclo for per la suddivisione di ogni giorno del mese in forma testuale *******/
    /*****************************************************************************/

    for (NSInteger initialDay = 1;  initialDay <= numberOfDay; initialDay ++) {

        // Crea l'array contenente tutti giorni del mese dal LUN alla DOM
        NSDateFormatter *dayFormat = [[NSDateFormatter alloc] init];

        NSString *dayString = [NSString stringWithFormat:@"%@", [[dayFormat shortWeekdaySymbols] objectAtIndex:todayWeekDay]];
        NSString *uppercase = [dayString uppercaseString];
        [week addObject:uppercase];

        todayWeekDay ++;

        // Crea l'array contenente la numerazione delle celle
        NSNumber *totalDay = [NSNumber numberWithInteger:initialDay];
        [day addObject:totalDay];

        if (todayWeekDay >6) todayWeekDay = 0;
    }
}

【问题讨论】:

    标签: ios uiview uicollectionview nsdate nsindexpath


    【解决方案1】:

    也许……

    1. NSDate *date = [calendar dateFromComponents:components];
    2. NSDateComponents *compWeek = [calendar components:NSCalendarUnitWeekday fromDate:date];
    3.
    4. NSInteger weekDay = [compWeek weekday];
    5. 
    6. /******* Numero di giorni del mese in corso *******/
    7. /*************************************************/
    8. NSInteger numberOfDay = [KPSmallCalendarDayData dayOfMonthFromDate:[NSDate date]];
    

    看起来您想从第 1 行使用 date,但您在第 8 行传递了一个 date 对象([NSDate date] which == 今天)。第 8 行应该是:

    NSInteger numberOfDay = [KPSmallCalendarDayData dayOfMonthFromDate:date];
    

    【讨论】:

      最近更新 更多