@@ -401,6 +401,12 @@ FocusScope {
401401 }
402402
403403 if (item && item.hasOwnProperty("displayMarginBeginning")) {
404+ var buffer = wasCurrentOnMoveStart ? categoryView.height * 1.5 : 0;
405+ var onViewport = baseItem.y + baseItem.height > 0 &&
406+ baseItem.y < categoryView.height;
407+ var onBufferViewport = baseItem.y + baseItem.height > -buffer &&
408+ baseItem.y < categoryView.height + buffer;
409+
404410 if (item.growsVertically) {
405411 // A item view creates its delegates synchronously from
406412 // -displayMarginBeginning
@@ -428,7 +434,7 @@ FocusScope {
428434 displayMarginEnd = -Math.min(-displayMarginEnd, baseItem.height);
429435 displayMarginEnd = Math.round(displayMarginEnd);
430436
431− if (scopeView.isCurrent || scopeView.visibleToParent) {
437+ if (onBufferViewport && (scopeView.isCurrent || scopeView.visibleToParent)) {
432438 item.displayMarginBeginning = displayMarginBeginning;
433439 item.displayMarginEnd = displayMarginEnd;
434440 if (holdingList && holdingList.moving) {
@@ -441,7 +447,10 @@ FocusScope {
441447 item.cacheBuffer = 0;
442448 }
443449 } else {
444− item.cacheBuffer = categoryView.height * 1.5;
450+ // Protect us against cases where the item hasn't yet been positioned
451+ if (!(categoryView.contentY === 0 && baseItem.y === 0 && index !== 0)) {
452+ item.cacheBuffer = categoryView.height * 1.5;
453+ }
445454 }
446455 } else {
447456 var visibleRange = baseItem.height + displayMarginEnd + displayMarginBeginning;
@@ -459,11 +468,6 @@ FocusScope {
459468 }
460469 }
461470 } else {
462− var buffer = wasCurrentOnMoveStart ? categoryView.height * 1.5 : 0;
463− var onViewport = baseItem.y + baseItem.height > 0 &&
464− baseItem.y < categoryView.height;
465− var onBufferViewport = baseItem.y + baseItem.height > -buffer &&
466− baseItem.y < categoryView.height + buffer;
467471 if (!onBufferViewport) {
468472 // If not on the buffered viewport, don't load anything
469473 item.displayMarginBeginning = 0;