캘린더의 연속 일정을 구현하는 방법이 있을까요?

현재 YM캘린더를 이용하여 일정에 대한 앱을 만들려고 합니다
일정을 추가할 때 종료일에 따라 라벨이 연속적으로 이어지게 하고 싶은데
문제는 일정의 종료일이 아무리 길어도 해당 행을 넘어가지 못합니다…

//이벤트에 대한 데이터 레인지를 반환하는 함수

func calendarView(_ view: YMCalendarView, dateRangeForEventAtIndex index: Int, date: Date) → DateRange? {
return DateRange(start: date, end: calendar.endOfMonthForDate(date))
}

예시로 모든 일정이 말일까지 잡혀있다고 가정하고 해당 달의 4일과과 마지막 날에 일정을 추가하였습니다

위와 같이 나타납니다 그래서 어디서 이 함수가 정의 되어있는지 찾아보니

func eventsRowView(_ view: YMEventsRowView, rangeForEventAtIndexPath indexPath: IndexPath) → NSRange {
var comps = DateComponents()
comps.day = indexPath.section
guard let date = calendar.date(byAdding: comps, to: view.monthStart),
let dateRange = dataSource?.calendarView(self, dateRangeForEventAtIndex: indexPath.item, date: date) else {
return NSRange()
}
let start = max(0, calendar.dateComponents([.day], from: view.monthStart, to: dateRange.start).day!)
var end = calendar.dateComponents([.day], from: view.monthStart, to: dateRange.end).day!
if dateRange.end.timeIntervalSince(calendar.startOfDay(for: dateRange.end)) >= 0 {
end += 1
}
end = min(end, NSMaxRange(view.daysRange))
return NSRange(location: start, length: end - start)
}

이해한 바로는 해당 행의 끝을 넘어가지 못하도록 범위를 반환합니다 그렇다면 여러줄에 걸쳐서 나타나는 일정은 어떻게 짜야할지 도움주시면 감사하겠습니다

좋아요 1
var end = calendar.dateComponents([.day], from: view.monthStart, to: dateRange.end).day!
if dateRange.end.timeIntervalSince(calendar.startOfDay(for: dateRange.end)) >= 0 {
    end += 1
}
end = min(end, NSMaxRange(view.daysRange))

이 부분 때문에 그렇다는 거죠?

지금 작성한 코드 상으로는 5줄이 생겨야 하는거구요?

저 함수는 Range 인스턴스만 리턴하도록 되어 있는데,
그 Range가 행의 끝까지만 가능한 거죠?

  1. 만약 행의 끝을 넘어가는 Range를 하드코딩해서 리턴했을 때 저 라이브러리가 어떻게 반응할지 궁금하네요

  2. 만약 1) 에서 오동작한다면 그 라이브러리를 우리가 수정하거나, 아니면 프레임워크에 맞춰서 여러개의 이벤트로 쪼개서 그리도록 하는 번거로운 로직을 우리 앱 안에 넣거나, 아니면 다른 라이브러리로 바꿔야 겠네요.

  1. 과 같이 행의 끝을 넘어가는 Range를 줬을 때도 그림과 같이 그대로입니다 ㅠ
  2. 에서 수정을 하고 싶은데 애초에 구조를 Row로 준거 같아서 라이브러리 수정이 좀 어려워보입니다.,
    혹시 연속 일정 추가 가능한 캘린더 라이브러리가 있을까요??
좋아요 1

찾아봐야겠는데요, FSCalendar를 많이 쓰던데 검통해 봤나요?

지금 현 상태에서 해결하려면

이 방법을 사용해야 할 것 같은데요?!