Добавление .navigationTitle для просмотра в NavigationStack нарушает анимацию.IOS

Программируем под IOS
Ответить
Anonymous
 Добавление .navigationTitle для просмотра в NavigationStack нарушает анимацию.

Сообщение Anonymous »


Я пытаюсь создать представление, которое показывает список элементов/обзор в одном состоянии и подробную информацию о выбранном элементе списка в другом состоянии, и я хотел бы отображать анимацию героя при переключении между этими двумя состояниями . Я также хотел бы отображать заголовок навигации в состоянии «обзор», поэтому я заключаю все в NavigationStack. Однако у меня возникла проблема с iOS 17/Xcode 15, где .navigationTitle нарушает анимацию между представлениями «обзор» и «подробности». По какой-то причине подпредставление «подпрыгивает» при добавлении/удалении заголовка навигации.

Вот очень простая версия того, что я пытаюсь сделать:

импортировать SwiftUI @Главный актер последний класс TestViewModel: ObservableObject { @Published Private(set) var flag = false функция toggleFlag() { флаг.toggle() } } структура TestView: Просмотр { @ObservedObject вар viewModel: TestViewModel @Namespace частная переменная анимация var body: some View { Навигационный стек { ВСтек { если viewModel.flag { // состояние "детали" ВСтек { круг текст кнопка переключения } } еще { // состояние "обзор/список" ВСтек { круг кнопка переключения } .navigationTitle("Название") } } } } частный var switchButton: some View { Кнопка("переключатель") { сАнимацией { viewModel.toggleFlag() } } .matchedGeometryEffect(id: «Кнопка», в: анимация) } частный круг var: some View { Круг() .fill(.красный) .frame(ширина: 44, высота: 44) .matchedGeometryEffect(id: «Форма», в: анимация) } частный текст var: some View { Текст("Тейлор Свитч - 1989") .font(.headline) } } Похоже, что .matchedGeometryEffect работает: когда отображается «деталь», кружок и кнопка анимируются, как будто они освобождают место для текста посередине, а когда «обзор» отображается вид, кружок и кнопка анимируются, как будто они перемещаются в пустоту, оставленную текстом. Если вы удалите .navigationTitle, вы также заметите, что анимация работает правильно. Кажется, проблема существует независимо от того, присутствует ли .matchedGeometryEffect или нет.

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

Я нашел эту тему на форумах Apple, но решение, похоже, не сработало для моего случая, и я также видел, что кто-то еще прокомментировал, что проблема исправлена ​​в Xcode 15, поэтому я не думаю, что у меня есть та же проблема.
Демонстрационные видео
Вот две картинки: одна с применением navigationTitle, другая без применения:

пример неработающей анимации

пример анимации без заголовка навигации
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»