Преодолейте системные ограничения с помощьюSwiftUI🔗
В настоящее время существует 3 способа представления всплывающих окон. Один с UIPopoverPresentationController
, но работает только на iPad. Вы также можете представить UIMenu
, но это только для iOS 14+. Наконец, вы можете использовать UIAlertController
. Это, вероятно, проще всего реализовать, но и больше всего ограничивает, так как он поддерживает только метки, кнопки и текстовые поля.
Итак… что, если вам нужно уведомление в приложении? Видео "картинка в картинке"? Или всплывающее окно? Здесь на помощь приходят настраиваемые всплывающие окна.
Мы будем использовать библиотеку Popovers. Полное раскрытие: я разработчик этого. Но это на 100% открытый исходный код и под лицензией MIT, поэтому не стесняйтесь использовать его по своему усмотрению.
Во-первых, вам нужно добавить библиотеку в свой проект. Popovers поддерживает диспетчер пакетов Swift — в Xcode просто перейдите в File
→ Add Packages…
, затем введите URL-адрес:
https://github.com/aheze/Popovers
С этого, давайте начнем!
Основные всплывающие окна🔗
Чтобы добавить простое всплывающее окно, просто используйте модификатор .popover()
. Всплывающие окна основаны на SwiftUI, что означает, что вы можете передать и представить любое представление, которое хотите.
Хорошо, а что, если вместо этого вы хотите прикрепить всплывающее окно к верхней части кнопки? Это может также использовать немного интервала. Ну, это так же просто:
Круто — теперь давайте добавим анимацию и настроим резинку.
И теперь у вас есть бодрый поповер! Это только поверхностное представление о том, что вы можете сделать — вот список всех настраиваемых атрибутов. Но теперь давайте взглянем на некоторые более продвинутые функции.
Расширенные всплывающие окна🔗
Среди моих любимых функций SwiftUI — его переходы — пока структура представления одинакова, вы анимируете между явно разными представлениями. Popovers использует это преимущество с модификатором .popover(selection:)
, который позволяет плавно переходить между несколькими всплывающими окнами.
Хороший. Но это еще не все! Когда я начал создавать всплывающие окна, я хотел сделать их максимально настраиваемыми. Так что, если вы хотите связать всплывающее окно с базовым представлением? Просто прикрепите background
и вставьте PopoverReader
— что-то вроде GeometryReader
, но круче.
Одна последняя вещь. Мне очень нравится внешний вид UIMenu
, но они доступны только на iOS 14+. Поэтому я перенес его на iOS 13, используя Popovers!
Наряду с шаблоном Menu
есть куча других служебных представлений и методов, которые я включил в исходный код. Я оставлю это на ваше усмотрение, чтобы создать что-то еще круче.
Заключение🔗
Системные компоненты великолепны, если вы готовы пожертвовать возможностью настройки. Это и хорошо, и плохо — поскольку все приложения используют одни и те же компоненты, пользовательский интерфейс становится очень согласованным на всей платформе. Но если вам нужен хоть малейший контроль, вы застряли.
Мне нужно было такое управление для моих приложений, поэтому я сделал Поповеры. Я надеюсь, что это пригодится вам некоторое время. Спасибо за прочтение!