2015-01-28 2 views
3

У меня возникла проблема между iAd BannerView, созданной в IB, и его ограничениями. У меня есть IBOutlet для нижнего ограничения iAd BannerView с супервидом. В viewDidLoad() ViewController я устанавливаю выход на 0 минус высота баннера, чтобы поместить iAd BannerView за пределы нижней границы экрана.Autolayout отличается от iOS 7 и iOS 8

@IBOutlet var adBannerView: ADBannerView! 
@IBOutlet var adBannerBottomConstraints: NSLayoutConstraint! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Configure answers index 
    self.arrayAnswIndex = ["A", "B", "C", "D", "E"] 

    // TableView Cell 
    var nib = UINib(nibName: "QuestionTableViewCell", bundle: nil) 
    self.simulazioneTableView.registerNib(nib, forCellReuseIdentifier: self.QuestionCellIdentifier) 
    var nibAnswer = UINib(nibName: "AnswerTableViewCell", bundle: nil) 
    self.simulazioneTableView.registerNib(nibAnswer, forCellReuseIdentifier: self.AnswerCellIdentifier) 

    // NavigationBar 
    self.navigationBarSettings() 

    // TabBar 
    self.tabBarController?.tabBar.hidden = true 

    // iAd Banner 
    adBannerView.hidden = true 
    adBannerBottomConstraints.constant = 0 - self.adBannerView.bounds.size.height   
} 

При загрузке объявления анимировать ограничение, чтобы показать баннер с:

func bannerViewDidLoadAd(banner: ADBannerView!) { 
    if (adBannerView.hidden == true) { 
     //now show banner 
     adBannerView.hidden = false 
     self.adBannerBottomConstraints.constant = self.adBannerBottomConstraints.constant + self.adBannerView.frame.size.height 
     UIView.animateWithDuration(0.4, animations: { 
      self.view.layoutIfNeeded() 
     }) 
    } 
} 

Проблемой в том, что в прошивке 8 все работает нормально, в прошивке 7 вместо ОВР BannerView в два раз его размера под дном margin после viewDidLoad(), и поэтому при загрузке объявления баннер остается за пределами экрана. Я временно разрешил проблему с проверкой версии устройства и соответствующим образом изменил ограничение в viewDidLoad().

// iAd Banner 
adBannerView.hidden = true 
if ((UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0) { 
    adBannerBottomConstraints.constant = 0 - self.adBannerView.bounds.size.height 
} else { 
    adBannerBottomConstraints.constant = 0 
} 

Есть лучший способ выполнить мою цель? Спасибо, ребята!

Andrea

Изображения:

ответ

2
adBannerBottomConstraints.constant = 
    0 - self.adBannerView.bounds.size.height   

Но это ваша проблема прямо здесь. Это точно такое же арифметическое вычисление с жестким кодированием, основанное на предположениях относительно фактических значений вещей, которые означают, что вы должны не делать. Весь смысл автоотключения в том, что вы делаете не подсчитайте что угодно: вы устанавливаете ограничения, которые описывают, где должно быть представление. Если вы хотите, чтобы эта вещь была ниже нижней части супервизора, закрепите ее сверху до нижней части супервизора!

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

+0

Спасибо, матовый, вы совершенно правы. Поэтому я изменил ограничения в IB: я закрепил вершину iAd BannerView с нижней частью супервизора, и я удалил предыдущее ограничение нижнего баннера. Я удалил предыдущую конфигурацию iAd в viewDidLoad(), оставив только 'self.adBannerView.hidden = true', а затем я изменил bannerViewDidLoadAd (нижний комментарий). На iOS 8 отлично работает, на iOS 7 вместо viewDidLoad() баннер правильно размещен, но когда объявление загружается, баннер подталкивает таблицуView до тех пор, пока он не исчезнет выше верхнего поля. Где моя ошибка? Спасибо огромное! –

+0

[iOS 7 Error Image] (http://tinyurl.com/lqhqj3m) | 'FUNC bannerViewDidLoadAd (баннер: ADBannerView!) { если (adBannerView.hidden == верно) { adBannerView.hidden = ложь self.view.removeConstraint (adBannerTopConstraints) вар bannerSuperViewConst = NSLayoutConstraint (пункт: self.view, атрибут: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Ровный, toItem: self.adBannerView, атрибут: NSLayoutAttribute.Bottom, умножитель: 1.0, константа: 0,0) self.view.addConstraint (bannerSuperViewConst) UIView.animateWithDuration (0.4, анимации: { self.view.layoutIfNeeded() })}} ' –

Смежные вопросы