我正在用swift从this example开始制作日历。
到目前为止,这是结果,我只显示了从今天开始的7天。
swift - Swift日历-移至下周-LMLPHP
我已添加了一个按钮,下周将显示。到目前为止,我已经尝试过:

func moveToNextWeek() {
    self.startDateInWeek = self.startDateInWeek?.dateByAddingDays(days: 7)

    DispatchQueue.main.async {
            self.collectionView.performBatchUpdates({
                    }, completion: { (completed) in
                            self.collectionView.reloadData()
                            self.weekFlowLayout?.invalidateLayout()

            })
    }
}

这只是改变了变量startDateInWeek,当加载的视图被声明为startDateInWeek = Date()(今天的日期)时。
但是,当我按下按钮时,又增加了一个星期,但我必须手动滚动。
dateByAddingDays()是声明为
func dateByAddingDays(days:Int)->Date{
    let calendar = Calendar(identifier: .gregorian)
    var comp = DateComponents()
    comp.day = days
    return calendar.date(byAdding: comp, to: self)!
}

最佳答案

Calendar提供了一种更好的方法来计算下周的开始,甚至取决于当前语言环境的第一个工作日设置:

let calendar = Locale.current.calendar
calendar.firstWeekday // Sunday == 1, Saturday == 7
let weekDayComponent = DateComponents(weekday:calendar.firstWeekday)
let startOfNextWeek = calendar.nextDate(after: Date(), matching: weekDayComponent, matchingPolicy: .nextTime)

10-08 06:10