Рендеринг FlatList приводит к удалению подпредставлений ключевого окна - PullRequest
2 голосов
/ 07 ноября 2019

У меня есть собственный проект с экраном, построенный с использованием компонента «Плоский список». Каждый визуализированный элемент представляет собой изображение, которое выполняет функцию предварительного просмотра видео.

При нажатии на предварительный просмотр видео происходит замена изображения предварительного просмотра с помощью собственного видеопроигрывателя UIView, с которым я установил мост. Видео воспроизводится, и пока все хорошо.

Когда я нажимаю кнопку полного экрана, видео выходит на полный экран, как и ожидалось. Под капотом контроллер просмотра видео достигает этого, присоединяя представление к keyWindow

- (UIWindow *)topWindow {
    if ([UIApplication sharedApplication].keyWindow) {
        return [UIApplication sharedApplication].keyWindow;
    }
    return [UIApplication sharedApplication].windows.firstObject;
}

Затем далее в методе переключения полного экрана

[self.topWindow addSubview:self.view];
[self.topWindow makeKeyAndVisible];

Отладка иерархии представления в XcodeЯ могу видеть, что контроллер представления был вставлен как дочерний элемент UIWindow.

enter image description here

Проблема

Все в этомДело в том, пока я не поменяю ориентацию устройства. Представление больше не присутствует в keyWindow, и на экране снова отображается FlatList.

В отладчике просмотра контроллер пропал:

enter image description here

Проблема не возникает вне FlatList

Чтобы изолировать проблему, я вывел плеер за пределы плоского списка, сделал его полноэкранным, и проблема не возникает.

Я полагаю, что проблема вызвана каким-то образом рендерингом плоского списка, если он работает правильно вне его.

Может кто-нибудь может пролить свет на основную причину и есть лиспособ предотвратить это?

Редактировать

Просто, чтобы было ясно, функция клавиш настроена правильно в FlatList, поэтому повторный рендеринг не должен вызывать этого.

...