November 23

134. ViewThatFits + @State

Недавно чинил любопытный баг, который оказался очень простым на деле, но нейросеть исправить его не смогла

Постановка и демо

На главном экране в приложении 2 варианта UI: для широкого экрана (например, для iPad) и для узкого экрана (для iPhone). На этом экране можно открыть модальное окно с важной функциональностью, а для поддержки двух вариантов UI используется ViewThatFits (удобная штука для iOS 16+), но при повороте экрана на айфоне эта модалка закрывается сама:

Демонстрация бага: неприятно будет, если модалка сама закроется при повороте экрана
Исправленный вариант: модалка не закрывается при повороте экрана, все ок.

Причина бага

Проблема возникает из-за хранения @State-свойства для модального окна внутри дочерней вьюхи, которая используется в обоих вариантах UI, а при повороте экрана ViewThatFits приводит к частичному сбросу состояний дочерних вьюх, которые исчезают.

Почему сброс частичный? Потому что на девайсе при повороте экрана модалка закрывалась, а при повороте обратно - сама появлялась, но не каждый раз

Код для этого случая можно посмотреть в гитхабе.