Ssylka

Динамические Sheet-ы в SwiftUI с автоматическим определением высоты для iOS 15+

Разработан нативный Sheet для SwiftUI, автоматически подстраивающий высоту под контент, совместимый с iOS 15 и выше. Для реализации использованы UIKit, UIViewControllerRepresentable, UIHostingController и Objective-C.
Динамические Sheet-ы в SwiftUI с автоматическим определением высоты для iOS 15+
Изображение носит иллюстративный характер

Решение включает использование UIKit для создания кастомного UISheetPresentationController, UIViewControllerRepresentable для интеграции в SwiftUI и UIHostingController для управления контентом и его размерами. Objective-C применяется для расширения возможностей UISheetPresentationControllerDetent.

Основной проблемой был динамический подсчёт высоты, решённый с помощью метода systemLayoutSizeFitting. Также решена проблема с приватным API для постоянной высоты Sheet в iOS 15 через Objective-C и обход ограничений Environment(\.dismiss) путём создания кастомного EnvironmentKey.

Готовый компонент оформлен как Swift Package. В репозитории на GitHub доступны примеры использования, включая базовый пример и пример с закрытием через кастомный EnvironmentKey. При использовании ScrollView внутри dynamicSheet он автоматически растягивается на весь экран.


Новое на сайте

18594Записная книжка против нейросети: ценность медленного мышления 18593Растущая брешь в магнитном щите земли 18592Каким образом блокчейн-транзакции стали новым инструментом для кражи криптовалюты? 18591Что скрывается за ростом прибыли The Walt Disney Company? 18590Является ли ИИ-архитектура, имитирующая мозг, недостающим звеном на пути к AGI? 18589Как Operation Endgame нанесла сокрушительный удар по глобальной киберпреступности? 18588Кибервойна на скорости машин: почему защита должна стать автоматической к 2026 году 18587Как одна ошибка в коде открыла для хакеров 54 000 файрволов WatchGuard? 18586Криптовалютный червь: как десятки тысяч фейковых пакетов наводнили npm 18585Портативный звук JBL по рекордно низкой цене 18584Воин-крокодил триаса: находка в Бразилии связала континенты 18583Опиум как повседневность древнего Египта 18582Двойной удар по лекарственно-устойчивой малярии 18581Почему взрыв массивной звезды асимметричен в первые мгновения? 18580Почему самые удобные для поиска жизни звезды оказались наиболее враждебными?