Собственный сценарий IoS Динамика просмотра списка c Элементы высоты - PullRequest
0 голосов
/ 08 мая 2020

Я создаю приложение nativescript angular с полосой вкладок, и на одной из страниц есть панель поиска и результаты, отображаемые в ListView. Возвращаемые результаты могут различаться по длине, поэтому высота каждого элемента может быть разной. Все отображается нормально, когда результаты поиска возвращаются, однако, если я go перехожу на другую «страницу» через полосу вкладок и возвращаюсь, iOS redr aws все элементы списка имеют одинаковую высоту, в результате чего некоторые результаты будут вырезаны выкл, а другие должны иметь тонну белого пространства.

Если я начинаю прокручивать список вверх и вниз, и становятся видимыми различные элементы, они начинают исправляться, что приводит к резкому скачку результатов вниз / вверх при изменении высоты. Это не проблема Android. Что я делаю не так?

<GridLayout rows="auto *" class="p-20">
    <GridLayout row="0" rows="*">
        <StackLayout row="0" class="input-field">
            <SearchBar #searchField hint="Search ..." class="input" (submit)="startSearch($event)" (clear)="startSearch($event)"></SearchBar>
        </StackLayout>
    </GridLayout>
    <GridLayout row="1">
        <ActivityIndicator [busy]="isSearchingKJ"></ActivityIndicator>
        <ListView *ngIf="kjResults?.length > 0" [items]="kjResults" (itemTap)="select($event)">
            <ng-template let-item="item" let-i="index">
                <StackLayout>
                    <Label class="search" [text]="item.book + ' ' + item.chapter + ':' + item.verse"></Label>
                    <Label class="search-results" textWrap="true" (loaded)="displaySearchResult($event, item)"></Label>

                </StackLayout>
            </ng-template>
        </ListView>
    </GridLayout>
</GridLayout>

Вот код, генерирующий форматированный текст для каждого элемента:

 displaySearchResult(args, result) {
    const container = <Label>args.object;

    const formattedStringLabel = new FormattedString();
    for (const fragment of result.text) {
      const span = new Span();
      span.text = fragment.text;

      if (fragment.highlight) {
        span.fontWeight = '800';
      }

      formattedStringLabel.spans.push(span);
    }

    container.formattedText = formattedStringLabel;
  }

Пример iOS графических сбоев: enter image description here

...