Невозможно программно установить высоту GridLayout - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь реализовать действия смахивания на ListView для каждого элемента.Весь вид - AbsoluteLayout, с двумя GridLayouts: один выступает в качестве «переднего плана» (элемент списка), а другой - в качестве «фона» (действия смахивания).Я хочу, чтобы они оба имели одинаковую высоту "переднего плана" (который является динамическим и отличается для каждого элемента списка).

Я успешно реализовал это на Android - я вызываю метод для события layoutChanged

onLayoutChanged(args: EventData) {
    const foregroundNotificationTemplate = (<AbsoluteLayout>(args.object)).getChildAt(1);
    const backgroundButtons = (<AbsoluteLayout>args.object).getChildAt(0);
    backgroundButtons.height = foregroundNotificationTemplate.getActualSize().height;
}

К сожалению, это не работает на iOS.Я пытался получить доступ к Frame и UiView, но безуспешно - он имеет высоту фонового содержимого.

Демонстрация, представляющая проблему на Nativescript Playground: https://play.nativescript.org/?template=play-ng&id=4LRwDC

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Не обязательно использовать AbsoluteLayout, так как вы анимируете позицию с помощью translate, что возможно с любым макетом.Поэтому использование GridLayout вместо AbsoluteLayout должно решить вашу проблему на обеих платформах, и вы также можете избавиться от события layoutChanged для измерения высоты.

Также обратите внимание, что ваш шаблон элемента ListView не может быть динамическим, выне следует использовать ngIf или что-либо, что изменит структуру элемента списка, вместо этого используйте несколько шаблонов.

0 голосов
/ 02 июля 2019

Для тех, кто ищет рабочее решение, Манодж предложил следующее: https://play.nativescript.org/?template=play-ng&id=yXggcv

...