ADBannerView занимает больше места, чем обычно

У меня есть что-то странное в моем приложении, и, поскольку я новичок в ADBannerView, я надеюсь, что кто-нибудь сможет мне помочь.

Я уже настроил в appDelegate.swift методы для создания и управления ADBannerView, на мой взгляд, я добавляю этот код:

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
override func viewDidLoad() {
        super.viewDidLoad()


        appDelegate.adBannerView.center = CGPoint(x: view.frame.midX, y:  view.frame.height - appDelegate.adBannerView.frame.height / 2)

        view.addSubview(appDelegate.adBannerView)

        self.canDisplayBannerAds = true

    }

Тогда iAd правильно отображается в моем представлении, но также и пустая полоса 49px над ним (белая). Как я могу удалить его? Это часть iAd? Есть идеи?

Нажмите, чтобы увидеть изображение

Заранее спасибо!


person towerthepower    schedule 28.10.2015    source источник
comment
Как вы создаете свой bannerView?   -  person pbush25    schedule 28.10.2015
comment
в AppDelegate я добавил var adBannerView = ADBannerView(). adBannerView.delegate = self, adBannerView.hidden = true и функции bannerViewDidLoadAd, bannerViewActionDidFinish, bannerView. на мой взгляд, я использую let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate , поэтому я могу добавить в основное представление appDelegate.adBannerView   -  person towerthepower    schedule 28.10.2015


Ответы (2)


Спасибо pbush25, я нашел решение. Выкладываю, если другим нужно.

В appDelegate.swift

class AppDelegate: UIResponder, UIApplicationDelegate, ADBannerViewDelegate {

var window: UIWindow?
var adBannerView = ADBannerView()
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    adBannerView.delegate = self
    adBannerView.hidden = true
    return true
}


func bannerViewDidLoadAd(banner: ADBannerView!) {
    print("bannerViewDidLoadAd")
    adBannerView.hidden = false
}

func bannerViewActionDidFinish(banner: ADBannerView!) {
    print("bannerViewActionDidFinish")
}

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
    print("didFailToReceiveAdWithError: \(error)")
    adBannerView.hidden = true
}
func bannerViewWillLoadAd(banner: ADBannerView!) {
    print("bannerViewWillLoadAd")
}

func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
    print("bannerViewActionShouldBegin")
    return true
}

и в каждом представлении я хочу показывать iAd

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
override func viewDidLoad() {
    super.viewDidLoad()
    self.defaultLoad()
}

override func viewWillAppear(animated: Bool) {
    self.defaultLoad()
}
override func viewWillDisappear(animated: Bool) {
    appDelegate.adBannerView.delegate = nil
    view.removeFromSuperview()
}

func defaultLoad(){
    appDelegate.adBannerView.frame = CGRectMake(0, (view.frame.height) - 99, (view.frame.size.width), 50) // 50(banner)+49(tab bar)
    appDelegate.adBannerView.delegate = appDelegate
    super.view.addSubview(appDelegate.adBannerView)
    super.view.bringSubviewToFront(appDelegate.adBannerView)
    super.view.layoutIfNeeded()
    super.canDisplayBannerAds = true
}
person towerthepower    schedule 28.10.2015

Когда вы создаете свой экземпляр ADBannerView, вам, вероятно, следует создать его с помощью фрейма:

var adBannerView = ADBannerView(frame: CGRectMake(0, (self.window?.frame.height)! - 50, (self.window?.frame.size.width)!, 50))

И тогда он всегда должен быть в этой части всего Window вашего приложения. Таким образом, в вашем viewDidLoad вам не нужно устанавливать центр, вам просто нужно self.view.addSubview(adBannerView), а затем, возможно, self.view.bringSubviewToFront(adBannerView)

person pbush25    schedule 28.10.2015
comment
Спасибо, я пробовал, но ничего не меняется. Я использую контроллер панели вкладок для переключения между представлениями, может быть в этом проблема? Я попробовал с вашим предложением представление без панели вкладок, и оно работает правильно. Кажется, что высота панели вкладок дублируется в верхней части iAd. - person towerthepower; 28.10.2015
comment
Тогда вы можете попробовать -100 для позиции y. Вы также можете попробовать self.view.layoutIfNeeded(), который может помочь решить некоторые проблемы с макетом. - person pbush25; 28.10.2015
comment
Мне удалось понять, что если я использую более одного canDisplayBannerAds = true , например в 2 и более вкладках, появляется белая полоса. Поэтому я изменил свой код на super.view.addSubview(appDelegate.adBannerView); super.view.bringSubviewToFront (appDelegate.adBannerView); super.view.layoutIfNeeded(); super.canDisplayBannerAds = true; но я не знаю, как повторно использовать один и тот же adBannerView, так как я установил его на super вместо self. А если я напишу в другую вкладку super.canDisplayBannerAds = true; Я получаю белую полосу на первой вкладке. - person towerthepower; 28.10.2015