2015-01-05 2 views
0

У меня есть приложение, которое работает только на iPhone в ландшафте. Я реализовал iAd, чтобы разместить баннер в нижней части экрана. Это отлично работало при компиляции в Xcode 4, но теперь в Xcode 5 есть проблема. Когда пользователь постучал по объявлению в старой версии, объявление полного размера загрузилось бы в портрете. Но теперь, когда пользователь удаляет объявление, он загружает объявление, но только верхняя половина экрана имеет объявление - нижняя часть остается пустой. Он корректно работает в симуляторе и на тестовых устройствах с использованием тестовых объявлений, но теперь, когда приложение работает вживую, оно не работает.iAd не работает в iPhone в ландшафте

Все работает отлично на iPad, который не ограничивается только ландшафтом. Я дважды проверил свой код, и все так же, как указано в документации. Apple была менее чем полезной. Есть предположения?

enter image description here

Обновление: Я нашел еще 2 части к головоломке. Это происходит только с прошивкой 8. Когда пользователь вводит рекламный баннер, я получаю «Невозможно одновременно удовлетворяют ограничениям» ошибка со следующим:

"<NSLayoutConstraint:0x7c948310 H:[UIView:0x7c947e80(219)]>", 
"<NSLayoutConstraint:0x7c94edf0 H:[UILabel:0x7c94ecb0'Elapsed\n0:00'(62)]>", 
"<NSLayoutConstraint:0x7c94f180 H:[UIView:0x7c94a430]-(0)-[UILabel:0x7c94ecb0'Elapsed\n0:00']>", 
"<NSLayoutConstraint:0x7c94f210 UIView:0x7c94a430.width == UIView:0x7c94a320.width>", 
"<NSLayoutConstraint:0x7c94f270 H:|-(0)-[UIView:0x7c94a430] (Names: '|':UIView:0x7c9479e0)>", 
"<NSLayoutConstraint:0x7c94f2d0 H:[UILabel:0x7c94ecb0'Elapsed\n0:00']-(-1)-[UIView:0x7c94a320]>", 
"<NSLayoutConstraint:0x7c94f390 H:[UIView:0x7c94a320]-(1)-[UIView:0x7c947e80]>", 
"<NSLayoutConstraint:0x7c94f3f0 UIView:0x7c9479e0.centerX == UIView:0x7c947e80.centerX>", 
"<NSLayoutConstraint:0x7c9504b0 H:|-(0)-[UIView:0x7c9479e0] (Names: '|':UIView:0x7c94f920)>", 
"<NSLayoutConstraint:0x7c9504e0 H:[UIView:0x7c9479e0]-(0)-| (Names: '|':UIView:0x7c94f920)>", 
"<NSLayoutConstraint:0x7c971e90 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7c94f920(320)]>" 

"Will attempt to recover by breaking constraint " 
"<NSLayoutConstraint:0x7c948310 H:[UIView:0x7c947e80(219)]>" 

И, в строке состояния теперь распространяется на мой взгляд, в то время как в ios7 показано. Я построил раскладку изначально для ios7, поэтому что-то изменилось. Мне все равно (на самом деле предпочитаю), чтобы не отображалась строка состояния, но я не могу понять, как отлаживать эти ограничения.

+0

Какой интерфейс ориентации вы поддерживаете в вашем Info.plist и ваш вид контроллеров? – JoePasq

+0

Пейзаж влево и вправо для iPhone. – Bob

+0

Используете ли вы раскадровки - может ли быть что-то, что влияет на поворот и калибровку? Можете ли вы создать новый проект с одним пустым контроллером представлений, настроенным как ваш, и попытаться воспроизвести проблему? У меня есть портретное и ландшафтное приложение, которое отображает портрет iAd только на iOS 8.0. – JoePasq

ответ

1

Вы используете раскадровки - может ли быть что-то, что влияет на поворот и калибровку? Я рекомендую создать новый проект с одним пустым контроллером представлений, создающим ландшафт как ваш, и попытаться воспроизвести проблему там.

Некоторых вещей, которые могут влиять этого:

  • Раскадровка расконфигурации или забытый вид/установкой
  • маски/автоматического изменение Auto Layout constraints
  • Info.plist вращения и view controllers preferred rotation
  • IOS размеров контейнеров содержания

Часто я нахожу, что идущий t с помощью шагов по воссозданию ошибки обнаруживаются ошибки, позволяет увидеть различия между рабочей версией и моей и в конечном итоге исправить проблему.


Мне было проще сравнить их с теми, что были в Раскадровке. Для их дешифрования это refer to the visual format language.

Похоже, что ограничение, обеспечивающее конкретное представление, равно горизонтально 219, равное его надзору, разбивается. Проверьте свою раскадровку на любые предупреждения или ошибки в автоматическом макете, я нашел ее очень полезной в Xcode 6.

У вас есть несколько ограничений, если вы можете удалить некоторые отладки, которые могут сделать вещи намного проще. Наконец, если ваши подпрограммы все ссылаются друг на друга, что может затруднить выполнение ограничений, если это так, ссылаясь на супервизор, может помочь предотвратить конфликты.

Вот некоторые ссылки для отладки:

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