У меня точно такая же проблема, подумал, может быть, это проблема MonoTouch.
Будет приятно посмотреть, если кто-нибудь знает, почему это так. Я пытался заставить его повернуть назад, но мне не повезло.
Пока я собираюсь выпустить свое приложение, назовите это известной ошибкой.
EDIT:
Вот тестовый ViewController, который я использовал в MonoTouch.
using System;
using MonoTouch.iAd;
using MonoTouch.UIKit;
using MonoTouch.Foundation;
namespace ADBannerRotate
{
public class ViewController : UIViewController
{
private ADBannerView adBannerView = null;
public ViewController()
{
}
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
Console.WriteLine("ViewDidLayoutSubviews");
Console.WriteLine("ViewDidLayoutSubviews StatusBarOrientation: " + UIApplication.SharedApplication.StatusBarOrientation);
Console.WriteLine("ViewDidLayoutSubviews Orientation: " + UIDevice.CurrentDevice.Orientation);
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
Console.WriteLine("ViewDidLoad");
adBannerView = new ADBannerView();
adBannerView.AutoresizingMask = UIViewAutoresizing.FlexibleWidth;
NSMutableSet requiredContentSizeIdentifiers = new NSMutableSet();
requiredContentSizeIdentifiers.Add(ADBannerView.SizeIdentifierPortrait);
requiredContentSizeIdentifiers.Add(ADBannerView.SizeIdentifierLandscape);
adBannerView.RequiredContentSizeIdentifiers = requiredContentSizeIdentifiers;
if (UIApplication.SharedApplication.StatusBarOrientation == UIInterfaceOrientation.LandscapeLeft || UIApplication.SharedApplication.StatusBarOrientation == UIInterfaceOrientation.LandscapeRight)
{
adBannerView.CurrentContentSizeIdentifier = ADBannerView.SizeIdentifierLandscape;
}
else
{
adBannerView.CurrentContentSizeIdentifier = ADBannerView.SizeIdentifierPortrait;
}
adBannerView.ActionFinished += delegate(object sender, EventArgs e) {
Console.WriteLine("ActionFinished");
Console.WriteLine("ActionFinished StatusBarOrientation: " + UIApplication.SharedApplication.StatusBarOrientation);
Console.WriteLine("ActionFinished Orientation: " + UIDevice.CurrentDevice.Orientation);
};
adBannerView.AdLoaded += delegate(object sender, EventArgs e) {
Console.WriteLine("AdLoaded - " + adBannerView.CurrentContentSizeIdentifier);
};
adBannerView.FailedToReceiveAd += delegate(object sender, AdErrorEventArgs e) {
Console.WriteLine("FailedToReceiveAd");
};
adBannerView.WillLoad += delegate(object sender, EventArgs e) {
Console.WriteLine("WillLoad");
};
View.AddSubview(adBannerView);
}
public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation)
{
Console.WriteLine("ShouldAutorotateToInterfaceOrientation - " + toInterfaceOrientation);
Console.WriteLine("ShouldAutorotateToInterfaceOrientation StatusBarOrientation: " + UIApplication.SharedApplication.StatusBarOrientation);
Console.WriteLine("ShouldAutorotateToInterfaceOrientation Orientation: " + UIDevice.CurrentDevice.Orientation);
if (adBannerView != null)
{
if (toInterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation == UIInterfaceOrientation.LandscapeRight)
{
adBannerView.CurrentContentSizeIdentifier = ADBannerView.SizeIdentifierLandscape;
}
else
{
adBannerView.CurrentContentSizeIdentifier = ADBannerView.SizeIdentifierPortrait;
}
}
return true;
}
}
}
Одна забавная вещь, с которой я столкнулся, заключается в том, что на iPad (3-го поколения) 3 раза вызывается ShouldAutorotateToInterfaceOrientation, затем ViewDidLayoutSubviews, затем ActionFinished, но на iPhone (3GS) должен вызываться один раз должен быть IfAutorotateToInterfaceOrientation, а один раз вызывается ActionFinished.
Также на iPad, если я блокирую поворот вида в альбомной ориентации, затем поднимаю рекламу, затем отклоняю ее, она меняет ее на портретную для меня.