@@ -700,8 +700,10 @@ void ListViewWithPageHeader::reallyReleaseItem(ListItem *listItem)
700700
701701void ListViewWithPageHeader::releaseItem(ListItem *listItem)
702702{
703− QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(listItem->m_item);
704− itemPrivate->removeItemChangeListener(this, QQuickItemPrivate::Geometry);
703+ QQuickItemPrivate::get(listItem->m_item)->removeItemChangeListener(this, QQuickItemPrivate::Geometry);
704+ if (listItem->sectionItem()) {
705+ QQuickItemPrivate::get(listItem->sectionItem())->removeItemChangeListener(this, QQuickItemPrivate::Geometry);
706+ }
705707 m_itemsToRelease << listItem;
706708}
707709
@@ -768,7 +770,7 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString §ionText)
768770 }
769771 m_sectionDelegate->completeCreate();
770772
771− // TODO attach to sectionItem so we can accomodate to it changing its height
773+ QQuickItemPrivate::get(sectionItem)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
772774
773775 return sectionItem;
774776}
@@ -1126,15 +1128,23 @@ void ListViewWithPageHeader::contentYAnimationRunningChanged(bool running)
11261128 }
11271129}
11281130
1129−void ListViewWithPageHeader::itemGeometryChanged(QQuickItem * /*item*/, const QRectF &newGeometry, const QRectF &oldGeometry)
1131+void ListViewWithPageHeader::itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry)
11301132{
11311133 const qreal heightDiff = newGeometry.height() - oldGeometry.height();
11321134 if (heightDiff != 0) {
1133− if (!m_inContentHeightKeepHeaderShown && oldGeometry.y() + oldGeometry.height() + m_clipItem->y() <= contentY() && !m_visibleItems.isEmpty()) {
1135+ if (!m_visibleItems.isEmpty()) {
11341136 ListItem *firstItem = m_visibleItems.first();
1135− firstItem->setY(firstItem->y() - heightDiff);
1136− adjustMinYExtent();
1137− layout();
1137+ const auto prevFirstItemY = firstItem->y();
1138+ if (item == firstItem->sectionItem()) {
1139+ firstItem->setY(firstItem->y() + heightDiff);
1140+ } else if (!m_inContentHeightKeepHeaderShown && oldGeometry.y() + oldGeometry.height() + m_clipItem->y() <= contentY()) {
1141+ firstItem->setY(firstItem->y() - heightDiff);
1142+ }
1143+
1144+ if (firstItem->y() != prevFirstItemY) {
1145+ adjustMinYExtent();
1146+ layout();
1147+ }
11381148 }
11391149 refill();
11401150 adjustMinYExtent();