【问题标题】:Monotouch.Dialog IOS 6 Split view Rotation issueMonotouch.Dialog IOS 6拆分视图旋转问题
【发布时间】:2012-10-09 17:27:42
【问题描述】:

BUMP .. 还没弄明白,东西在旋转,但不在视线范围内。太奇怪了。 我可以提供更好的信息以获得帮助吗?

仍然有这个问题!真的很糟糕,我无法解决这个问题:(请帮助

BUMP .. 请让我死在这里!任何人! :)

所以,我使用的是Monotouch.Dialog,并且从 IOS 6 开始,我的 splitview 控制器的旋转行为很奇怪。

它实际上是在旋转,但是我的细节视图占据了整个屏幕,而主视图看起来好像是从屏幕框架中旋转出来的。也就是说,当主视图旋转时,我可以在瞬间看到主视图,然后它就消失了,而细节视图占据了整个屏幕。

自 IOS 6 起,我添加了必要的 ShouldAutorotate 函数并设置了 GetSupportedInterfaceOrientations。就像我说的那样,它会旋转,但有些东西刚刚关闭。

我试过IOS 5模拟器,它可以工作,所以肯定是IOS 6的问题。

有人知道我还应该去哪里寻找问题吗?

编辑:我在调试时注意到它不会进入我的主视图和详细视图的 ShouldAutorotate 覆盖,只有在我的拆分视图控制器中才会进入。在 iOS 5 中,它会正确进入 ShouldAutorotateToInterfaceOrientation。

这是我在详细视图和主视图中使用的代码:

public override bool ShouldAutorotate()
    {
        return true;
    }
    [Obsolete]
    public override bool ShouldAutorotateToInterfaceOrientation       (MonoTouch.UIKit.UIInterfaceOrientation toInterfaceOrientation)
    {
        return true;
    }

这是我的 SplitViewController 中的代码:

public override bool ShouldAutorotate()
    {
        return true;
    }

    [Obsolete]
    public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation requested)
    {
        return requested == UIInterfaceOrientation.LandscapeRight || requested == UIInterfaceOrientation.LandscapeLeft;
        //return requested == UIInterfaceOrientation.Portrait || requested == UIInterfaceOrientation.PortraitUpsideDown;

    }

    public override bool ShouldAutomaticallyForwardRotationMethods {
        get {
            return true;
        }
    }

有人请吗?我的工作需要这个,但我无法解决这个问题!任何想法都会有所帮助!

【问题讨论】:

  • 我注意到在我的拆分视图控制器上调用了 ShouldAutoRotate,但在细节和主视图控制器上没有调用。我将 UITableViewController 用于详细视图,将 UINavigationController 用于主视图。

标签: ios xamarin.ios ios6 monotouch.dialog autorotate


【解决方案1】:

不看代码本身就很难猜出哪里出了问题。它可能适用于 iOS 5.x,因为它将调用旧的 shouldAutorotateToInterfaceOrientation: 选择器(并且因为您的应用程序和/或 MonoTouch.Dialog 已经支持它)。

这在 iOS6 中已弃用 - 但它仍会被称为向后兼容,除非您实施它的替代品。请注意 Apple 文档中的复数形式 replacements

改用supportedInterfaceOrientations 和preferredInterfaceOrientationForPresentation 方法。)

弃用通知并不意味着 iOS6 不能使用旧 API。剩下的就是添加了一些新的、更好的 API,并且旧的 API可以在未来的一些 iOS 版本中删除(到目前为止,删除非常少见)。

注意:我鼓励您停止使用您不支持的 iOS 版本中的旧 API(例如,iOS 4.0 中已弃用的内容应在仅支持 5.0 及更高版本的应用程序中使用)。然而,复制代码以支持 5.0 和 6.0 best API 可能不是一个好主意,除非您从中获得一些东西(例如新功能)。

大部分新的 API,弃用旧的 API,都是为了让你的生活更轻松,而不是更难。

【讨论】:

  • 好吧,它现在肯定让它变得更难了,呵呵......但如果它不工作,旋转,因为 IOS6 设备甚至不会旋转,它确实如此。什么可能导致它将详细视图旋转出屏幕?
  • 这是我在详细视图和主视图中使用的: public override void DidRotate (UIInterfaceOrientation fromInterfaceOrientation) { base.DidRotate (fromInterfaceOrientation); this.TableView.SelectRow(lastSelectedQuestion, false, UITableViewScrollPosition.Middle); } 公共覆盖 bool ShouldAutorotate() { return true; } [过时] 公共覆盖 bool ShouldAutorotateToInterfaceOrientation (MonoTouch.UIKit.UIInterfaceOrientation toInterfaceOrientation) { return true; }
  • 我在拆分视图控制器中有这个: public override bool ShouldAutorotate() { return true; } [过时] public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation requested) { return requested == UIInterfaceOrientation.LandscapeRight ||请求 == UIInterfaceOrientation.LandscapeLeft; //返回请求 == UIInterfaceOrientation.Portrait ||请求 == UIInterfaceOrientation.PortraitUpsideDown; } 公共覆盖 bool ShouldAutomaticallyForwardRotationMethods { get { return true; } }
  • 请编辑您的原始问题。这将更容易阅读,更多的人会看到它(不仅仅是我)。
【解决方案2】:

另外别忘了设置window.rootViewController(否则iPad 上无法进行旋转)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多