【问题标题】:viewWillAppear does not have updated rotation after modal dismiss模式关闭后 viewWillAppear 没有更新的旋转
【发布时间】:2016-07-30 10:04:13
【问题描述】:

我有两个视图控制器(ViewController1 和 ViewController2),其中 ViewController1 有一个到 ViewController2 的模态 segue,而 ViewController2 可以被解除返回给 ViewController1。

如果我按照以下步骤操作:

ViewController1-旋转到横向-模态到VC2-ViewController2-旋转到纵向-关闭到VC1

然后,在 ViewController1 的 viewWillAppear 中,我打印 view.frame.size 并得到这个(在 iPhone 6s 模拟器上运行):

(667.0, 375.0)

这意味着宽度比高度长,或者它仍然是横向的。

这告诉我 ViewController1 还没有旋转,这是有道理的,因为它在 viewWillAppear 中。

我目前的选择(据我所知):

  1. 使用viewDidAppear - 不是首选,因为我在这里重新加载集合视图,并且更改会很明显。

  2. 创建一个展开的转场——不是首选,因为这需要故事板。

那么我还有哪些其他选择?是否有最适合我需求的视图控制器方法?

【问题讨论】:

  • 那么所有可以用情节提要完成的事情都可以通过程序来完成,这不是真的吗?我的印象是一切都可以通过编程方式完成。

标签: ios swift uiviewcontroller rotation


【解决方案1】:

你是对的:在 viewWillAppear 期间,ViewController1 的视图还没有在窗口层次结构中,所以它没有机会进行布局。 一般来说,如果你有一些代码来处理布局,我可以考虑将它放在 viewWillLayoutSubviews 或 viewDidLayoutSubviews 方法中。

【讨论】:

  • 据我了解,每次布局更改时都会调用viewDidLayoutSubviews,所以没有办法只获取一次(当然没有我列出的选项)?
【解决方案2】:

您可能会发现此答案有助于使 ViewController1 在旋转出现之前对其做出响应:https://stackoverflow.com/a/25667424/5496433

【讨论】:

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