【问题标题】:iPad App adds margin when opened in landscape left, not in landscape rightiPad App 在左侧横向打开时添加边距,而不是在横向右侧打开
【发布时间】:2013-02-16 07:52:24
【问题描述】:

我在使用横向 iPad 应用时遇到了一个非常奇怪的布局错误。

当应用程序以横向启动时,它会启动并完美运行。但是,当从横向左开始时,主视图顶部会添加 20 像素的边距。

这个应用程序的设计在顶部有一个标题栏,在底部有一个导航栏(两者都只是带有几个 UILabels/UIButtons 的 UIViews)。当您在有问题的横向左侧模式下启动应用程序并切换到横向右侧时,顶部和底部栏会移动 20px 高于它们应该定位的位置 - 即顶部栏的位置在状态栏下方,底部栏在框架底部上方 20px 处浮动。

这真的很奇怪。正如我所说,如果您以横向方式打开它,它完美

有人有什么想法吗?看到这个错误了吗?

我正在使用 iOS SDK 6.1 和 Xcode 4.6

编辑[更多细节]

我添加的一些日志中的一些可能的线索——主视图的帧为 (0,0,1024,748),而对 [[UIScreen mainScreen] applicationFrame] 的调用返回的帧为 (20,0,748,1024 ),这是肖像。当然很好奇,但不一定能解释启动状态之间的不一致——错误状态和功能模式之间的日志是相同的。

编辑[情节变厚]

所以我检查了所有的视图框架,并创建了一个可重现的错误。

应用程序中有一个全屏“幻灯片”模式,其中隐藏了状态栏。当应用程序在此全屏模式下旋转时,我能够旋转 20px 间隙错误。

所以流程是:

-应用程序正常运行,旋转正常 -进入全屏显示,显示正常 - 全屏旋转,布局移动20px - 关闭幻灯片,布局保持移动 -第一次旋转时,布局恢复正常

到达那里...有没有类似于 setWantsFullScreenLayout 的东西我需要在这里调用?

【问题讨论】:

    标签: ios ipad cocoa-touch uiviewcontroller uikit


    【解决方案1】:

    20 像素是状态栏的高度,相对于旋转的 20 像素偏移几乎总是与(根)视图控制器的框架有关。尝试将根视图控制器的视图框架设置为具有0,0 原点。

    【讨论】:

    • 这是我的第一个想法——应用程序有全屏部分,其中隐藏了状态栏,但是我从代码和 info.plist 中删除了所有与状态栏相关的业务。我添加的一些日志中的一些可能的线索——主视图的框架为 (0,0,1024,748),而对 [[UIScreen mainScreen] applicationFrame] 的调用返回的框架为 (20,0,748,1024),即是肖像。当然很好奇,但不一定能解释启动状态之间的不一致——错误状态和功能模式之间的日志是相同的。
    • 我最近没有重新检查过,但是 iOS 应用程序总是以纵向模式启动,如果设备旋转会立即发送旋转通知。因此,您将始终获得在发布期间在 iPad 上找到的框架。您是否尝试过更改框架原点和自动调整遮罩大小?
    猜你喜欢
    • 2014-11-20
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多