UISheetPresentationController был недавно выпущен для iOS 15 и, наконец, дает нам сторонний компонент для нижнего листа в стиле карты Apple, который можно увидеть во многих приложениях. К сожалению, iOS 15 не поставляется с эквивалентным компонентом для SwiftUI, но с небольшой магией UIViewControllerRepresentable мы можем заставить его работать в SwiftUI:

Этот подход работает путем создания оболочки наших представлений SwiftUI в экземплярах UIHostingController, которые могут использовать новые API-интерфейсы UISheetPresentationController. Контроллеры хостинга разделены на подклассы, чтобы мы могли захватывать события презентации и отклонения, чтобы поддерживать привязки SwiftUI в актуальном состоянии с состоянием представления. Затем мы берем обернутые контроллеры и возвращаем их в представление SwiftUI UIViewControllerRepresentable. Наконец, мы объединяем весь пакет в модификатор представления, чтобы дать нам API в стиле SwiftUI для создания нашего нового листа. Полный исходный код можно посмотреть здесь: