Размещение рекламных баннеров — SwiftUI TabView

#ios #swift #swiftui #admob

#iOS #swift #swiftui #admob

Вопрос:

У меня есть приложение SwiftUI, которое использует TabView в качестве основной навигации по приложению, и внедрило рекламный баннер AdMob для монетизации.

В настоящее время баннер размещается в виде наложения над панелью вкладок, но это не идеально по следующим причинам, вторая из которых вызывает особую озабоченность.

  1. Разные устройства и ориентации имеют разную высоту панели вкладок, что означает, что смещение для правильного размещения баннера вычислить сложно.
  2. 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. Я также ищу надежный ответ для баннеров с сообщениями об ошибках. Я чувствую, что смещение может помочь, но не могу разобраться без жестких значений кода, таких как высота панели вкладок, которая не будет работать на разных платформах.