#ios #swift #swiftui #admob
#iOS #swift #swiftui #admob
Вопрос:
У меня есть приложение SwiftUI, которое использует TabView в качестве основной навигации по приложению, и внедрило рекламный баннер AdMob для монетизации.
В настоящее время баннер размещается в виде наложения над панелью вкладок, но это не идеально по следующим причинам, вторая из которых вызывает особую озабоченность.
- Разные устройства и ориентации имеют разную высоту панели вкладок, что означает, что смещение для правильного размещения баннера вычислить сложно.
AdView()
Наложение может блокировать содержимое дочерних просмотров, что в лучшем случае является плохим пользовательским интерфейсом, а в худшем случае противоречит некоторым правилам размещения рекламы и удобства использования.
Я реализовал это так;
TabView {
View1()
.tabItem {
Image(systemName: "person.fill")
Text("My Jobs")
}
View2()
.tabItem {
Image(systemName: "clock")
Text("Shifts")
}
}
.overlay(AdView().frame(width: kGADAdSizeBanner.size.width, height: kGADAdSizeBanner.size.height).offset(x: 0, y: -kGADAdSizeSmartBannerPortrait.size.height - getTabBarHeightOffset()), alignment: .bottom)
Альтернативная реализация заключается в том, чтобы для VStack
каждого дочернего представления с AdView
помощью, прикрепить AdView
к верхней части панели вкладок. Однако, если я делаю это, каждый раз, когда я перехожу к другому дочернему просмотру, объявление перезагружается.
Поведение, которое я хотел бы, заключается в том, что объявление сохраняется во всех дочерних представлениях, аналогично overlay
решению, но размещается непосредственно над панелью вкладок и не мешает дочерним представлениям.
Комментарии:
1. Я также ищу надежный ответ для баннеров с сообщениями об ошибках. Я чувствую, что смещение может помочь, но не могу разобраться без жестких значений кода, таких как высота панели вкладок, которая не будет работать на разных платформах.