【问题标题】:Strange behavior when switching view controller's view?切换视图控制器视图时的奇怪行为?
【发布时间】:2011-08-28 16:36:56
【问题描述】:

我有一个带有 IBOutlets 的 UIViewController 链接到几个 UIViews。各种按钮在视图之间切换,但是当我为控制器设置新视图时会出现问题。控制器和视图都是横向的,但是在前几次切换之后,一些视图以纵向模式显示。这可能是什么原因造成的?

【问题讨论】:

  • 只是猜测,viewWillAppear 的默认实现中有代码检测方向并为横向模式准备视图。如果在更改视图之前调用新视图的 viewWillAppear 会怎样?
  • UIView 没有 -viewWillAppear 方法。我用 UIViewController 的 -viewWillAppear 完成了你的建议,但没有改变。
  • 您的所有视图都应该是横向的,还是其中一些是纵向的?
  • 在 .xib 中它们都是横向的,我不允许旋转到纵向。
  • 您还可以查看我对类似问题的回答(也是赏金):Ipad orientation is not working well

标签: iphone objective-c


【解决方案1】:

您应该检查所有 UIViewControllers 是否实现了方法 shouldAutorotateToInterfaceOrientation。该方法告诉操作系统可以在哪个位置(屏幕方向)显示由UIViewControllers控制的UIViews

如果您希望所有视图仅以横向显示,则该方法应仅针对interfaceOrintation == UIInterfaceOrientationLandscapeLeftinterfaceOrintation == UIInterfaceOrientationLandscapeRight 返回YES。如果你只想要纵向,那么interfaceOrintation == UIInterfaceOrientationPortrait

例如(仅支持横向模式):

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

并且您应该检查您是否在项目设置中设置了适当的支持的设备方向(也称为支持的界面方向)。

【讨论】:

  • 是的,我已经完成了所有这些。正如我所说,它显示一次很好,然后在几次切换后停止工作。
【解决方案2】:

我认为您应该在 IB 中将视图设置为横向模式。如果这已经完成,那么我建议不要明确更改视图控制器的视图。实现一个可以改变视图的方法。
更详细:
将视图设置为视图控制器的视图,然后每个其他视图都应该是该视图的子视图。您可以通过删除呈现的视图并添加新视图来进行更改,或者另一种实现视图更改的方法是将 IB 中的所有视图添加为子视图,隐藏所有视图,然后当您想要更改时取消隐藏所需的视图并隐藏每隔一个。
我希望您理解我的方法,如果没有,那么我会在这里回答您的问题。
这种方式很容易实现。 :)

【讨论】:

  • 我尝试了删除和添加子视图的方式,虽然我喜欢你隐藏和取消隐藏视图的方法。明天我会试试,如果它有效,我会在赏金到期之前回到这里:P
  • 不,抱歉。我想我会寻求一些现实世界的帮助,因为这种情况非常具体。
【解决方案3】:

检查您是否在所有视图中启用了此方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

另外,您在模拟器或设备上看到的是什么?

【讨论】:

  • 两者,以及我应该如何将该方法添加到 UIView?
  • 您只需将这段代码复制粘贴到每个视图控制器中即可生效。
  • 是的,我已经在 UIViewController 中有它。我只是不明白您将其添加到视图中是什么意思。还有其他想法吗?
  • 这是一个 UIViewController 方法,不能单独添加到 UIViews 中。
【解决方案4】:

这可能是模拟器的错误,但请尝试为每个视图使用单独的 UIViewController 对象,而不是为所有视图使用一个控制器。就个人而言,我以前没有遇到过任何定向困难,但我以编程方式做事。我建议您也这样做(您可能不需要转换所有程序的 xib 文件,但可能只是您遇到问题的那个)。只需确保您用于该视图的所有 UIViewController 都已正确设置:shouldAutorotateToInterfaceOrientation,并且一切正常。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多