1. Make the calculation based on the row height.
@Entry
@Component
struct AllListItemHeight {
private itemHeightArr = [100, 150, 200, 130, 120, 110.130];
private listHeight = 700;
scroller = new ListScroller();
build() {
Column() {
Button('Is it more than one screen')
.height(50)
.width('100%')
.onClick(() => {
let result = 0;
for (let i = 0; i < this.itemHeightArr.length; i++) {
result += this.itemHeightArr[i];
}
console.info(result > this.listHeight ? 'More than one screen' : 'Not exceeding one screen');
})
List({ scroller: this.scroller }) {
ForEach(this.itemHeightArr, (_: number, index: number) => {
ListItem() {
Text(index.toString())
.width('100%')
.textAlign(TextAlign.Center)
}
.height(this.itemHeightArr[index])
.align(Alignment.Center)
}, (item: number) => JSON.stringify(item))
}
.height(this.listHeight)
.width('100%')
}
}
} 2. Call getItemRect(index: number): RectResult to obtain the size and position of the child component, and make the calculation based on the position and size information of the last ListItem.
@Entry
@Component
struct GetLastItem {
private itemHeightArr = [100, 150, 200, 130, 120, 110.130];
private listHeight = 700;
// Scroll controller for obtaining the position information of list items
scroller = new ListScroller();
build() {
Column() {
Button('Is it more than one screen')
.height(50)
.width('100%')
.onClick(() => {
let result = this.scroller.getItemRect(this.itemHeightArr.length - 1);
let flag = result.y + result.height > this.listHeight;
console.info(flag ? 'More than one screen' : 'Not exceeding one screen')
})
List({ scroller: this.scroller }) {
ForEach(this.itemHeightArr, (_: number, index: number) => {
ListItem() {
Text(index.toString())
.width('100%')
.textAlign(TextAlign.Center)
}
.height(this.itemHeightArr[index])
.align(Alignment.Center)
}, (item: number) => JSON.stringify(item))
}
.height(this.listHeight)
.width('100%')
}
}
} 3. Call getItemRectInGroup(index: number, indexInGroup: number): RectResult to obtain the size and position relative to the List of the last ListItem in the last ListItemGroup for calculation.
@Entry
@Component
struct GetLastGroup {
private groupItemHeightArr =
[[30, 50, 60, 40, 90, 80.60],
[50, 40, 50, 55, 77, 88.44],];
private listHeight = 700;
// Scroll controller for obtaining the position information of list items
scroller = new ListScroller();
build() {
Column() {
Button('Is it more than one screen')
.height(50)
.width('100%')
.onClick(() => {
let lastGroupIndex = this.groupItemHeightArr.length - 1;
let lastItemIndex = this.groupItemHeightArr[lastGroupIndex].length - 1;
let result = this.scroller.getItemRectInGroup(lastGroupIndex, lastItemIndex);
let flag = result.y + result.height > this.listHeight;
console.info(flag ? 'More than one screen' : 'Not exceeding one screen')
})
List({ scroller: this.scroller }) {
ForEach(this.groupItemHeightArr, (itemHeight: number[], index: number) => {
ListItemGroup() {
ForEach(itemHeight, (height: number) => {
ListItem() {
Text(index.toString())
.width('100%')
.textAlign(TextAlign.Center)
}
.height(height)
.align(Alignment.Center)
}, (item: number, index: number) => JSON.stringify(item) + index)
}
}, (item: number[]) => JSON.stringify(item))
}
.height(this.listHeight)
.width('100%')
}
}
}