【问题标题】:How can I set the size of a UIView init with storyboard?如何使用情节提要设置 UIView init 的大小?
【发布时间】:2012-09-27 08:23:16
【问题描述】:

我目前使用的是 iOS 6.0。

我有一个自定义的UIView,它需要有一定的大小。如果我以编程方式初始化视图并添加它就可以了。但是,我找不到可以在情节提要中设置视图大小的地方。

在情节提要中设置其大小不起作用,因为情节提要认为它是空的并将其大小设置为零。在viewDidLoadviewDidAppear 中设置其大小不起作用,因为稍后该大小将被_applyISEngineLayoutValue 覆盖。

【问题讨论】:

    标签: objective-c ios uiview uistoryboard


    【解决方案1】:

    您可以在您的 Interface Builder 中执行此操作。打开您有视图的情节提要并打开实用程序菜单:

    然后您可以在实用程序菜单顶部选择一个看起来像标尺的按钮:

    在该菜单中,您可以设置视图的大小以及您希望它如何展开。

    另外,请确保您在班级检查器中设置了班级视图:

    来自this site 的图像令牌。

    最后,确保覆盖 initWithFrameinitWithCoder 方法:

    - (id)initWithFrame:(CGRect)frame {
        return [super initWithFrame:frame];
    }
    
    //Needs to be overrided when you set your size in interface builder
    - (id)initWithCoder:(NSCoder *)aDecoder {
        return [self initWithFrame:[self frame]];
    }
    

    【讨论】:

    • 如我所说,无论我在inspector中设置什么,大小都会设置为零。
    • 您是否按照我在编辑中显示的那样在检查器中设置了您的课程?
    • 所以,我有一个 MyView:UIView 和 drawRect 方法,比如说画一个圆圈。然后我使用情节提要在根视图中放置一个 UIView,将类设置为 MyView,并将大小设置为 800 * 600。我期望屏幕上是一个圆圈,但什么都没有,因为视图的大小为零。
    • Storyboard 在初始化期间无论如何都不会给出合适的尺寸,尺寸是稍后设置的。
    • 你绝对不应该在一个 UIView 实例上同时调用 initWithCoder: 和 initWithFrame:。每个对象只应通过指定的初始化程序一次,并且该代码通过多个指定的初始化程序运行单个实例。
    【解决方案2】:

    我面临同样的问题,我认为简短的回答是:在使用情节提要时,您不能依赖视图的 init 方法中的框架或边界。

    当您的视图被 segue 初始化时,它将调用 initWithCoder: 方法而不是其他 init 方法,因为它正在从 .xib 文件中反序列化您的视图对象。在情节提要之前,框架和边界将在调用 initWithCoder: 时设置,但情节提要似乎不再是这种情况——iOS 代码稍后会设置这些值。

    根据具体情况,我使用了几种解决方法:

    1. 如果我事先知道视图的大小(例如只支持一种大小的特殊视图),我会在 initWithCoder: 方法中设置自己的框架。

    2. 如果我不知道视图的大小,我会推迟特定大小的初始化,直到调用我的视图的 layoutSubviews 方法。

    3. 如果更方便,我有时会在视图的 ViewController 中显式地执行特定于大小的初始化。 (不漂亮,但有时又快又容易。我并不自豪。)

    【讨论】:

    • 安德鲁,我认为你已经一针见血了——它在故事板环境中“根本行不通”。苹果似乎设置得很晚。
    【解决方案3】:

    我和你有同样的问题,当我选择视图并切换到属性检查器时,设置 “Simulated Metrics”如下,我可以在 Size 检查器中调整视图的大小。

    确保将 Size 设置为“Freeform”或“None”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多