【问题标题】:Size class initially unknown尺寸等级最初未知
【发布时间】:2015-06-15 13:33:43
【问题描述】:

我正在尝试在我的通用应用上设置我的 UI。我有一个带有大小类的故事板设置,一个相当简单的 UI。我的视图控制器中有一个视图。在这个视图中,我绘制了一个图表,因此只能使用setFrame 进行更新。

这就是我的问题开始的地方。我将图表设置为屏幕宽度。但是,当视图最初运行时,尺寸类似乎是未知的。

在我的故事板中,默认的“任意”尺寸是 600x600。我的观点认为它应该在我的 iPhone 上绘制 600 宽,这显然不是这么宽。

只有在我物理移动 iPhone 以切换方向更改后,它才会更新并识别正确的尺寸。

所以我的问题是,我该如何预防这个问题?我需要我的 UI 从一开始就知道尺寸,而不仅仅是在用户旋转 iPhone 之后。

【问题讨论】:

  • 你在哪里设置帧大小?您需要在 viewWillAppear 或稍后在布局发生后执行此操作。如果您在viewDidLoad 内执行此操作,则帧大小可能是错误的。

标签: ios objective-c storyboard size-classes


【解决方案1】:

但是,当视图最初运行时,尺寸类似乎是未知的。

视图和视图控制器是未知的,因为那时视图控制器还不是界面的一部分,没有环境。但UIScreen.mainScreen() 并不陌生。因此,如果您很早就需要这些信息,那么该向谁询问。

但是,正如您在评论中被告知的那样,听起来您可能只是这样做为时过早。在 viewDidLoad 或更高版本之前,视图控制器的视图中的任何内容(包括视图本身)都没有达到其实际大小。

【讨论】:

    【解决方案2】:

    有两个方法可以防止这个问题

    (1) 在

    中加载整个方法
    -(void)viewDidAppear:(BOOL)animated
    {
    }
    

    (2) 执行以下步骤

    • 转到文件检查员
    • 取消选中“使用大小分类”

    【讨论】:

    • 我会采纳你的第一个建议。但是,我最初在子视图 UIView 中很多,而不是视图控制器。最好只使用委托来告诉它何时更新?或者有没有好的 UIView 解决方案。
    • 试试这个方法来更新你所有的 UIview 框架 -(void)viewDidLayoutSubviews{ 设置你的 UIview 框架 } @JoshKahane
    • 成功。我不得不更新一些东西,所以这里只发生帧更新。否则我的整个用户界面会成倍增加并吓坏了。但这似乎有效。谢谢!
    • 已经搞定了,别着急!感谢支持。信用到期。