         eventFrame.origin.x = x
         eventFrame.origin.y = timeline.dateToY(snapped) - currentTimeline.container.contentOffset.y
 
+        if (endGapFix) {
+          let ytd2 = yToDate(y: editedEventView.frame.origin.y + editedEventView.frame.size.height, timeline: timeline)
+          let snapped2 = timeline.snappingBehavior.nearestDate(to: ytd2)
+          eventFrame.size.height = timeline.dateToY(snapped2) - timeline.dateToY(snapped)
+        }
+        
         func animateEventSnap() {
           editedEventView.frame = eventFrame
         }

      if suggestedEventHeight > minimumEventHeight {
        pendingEvent.frame = suggestedEventFrame
        prevOffset = newCoord
        accentDateForPendingEvent()
      }
    }
    
    if sender.state == .ended {
      commitEditing()
    }
  }

  private func accentDateForPendingEvent() {
    if let currentTimeline = currentTimeline {
      let timeline = currentTimeline.timeline
      let converted = timeline.convert(CGPoint.zero, from: pendingEvent)
      let date = timeline.yToDate(converted.y)
      timeline.accentedDate = date
      timeline.setNeedsDisplay()
    }
  }

  private func commitEditing() {
    if let currentTimeline = currentTimeline {
      let timeline = currentTimeline.timeline
      timeline.accentedDate = nil

      guard let tag = sender.view?.tag else {
        return
      }
      if let currentTimeline = currentTimeline {
        currentTimeline.container.tag = tag
      }
      let diff = CGPoint(x: newCoord.x - prevOffset.x,
                         y: newCoord.y - prevOffset.y)
      var suggestedEventFrame = pendingEvent.frame
