如何使用故事板设置UIView init的大小?

时间:2012-10-06 10:05:03

标签: objective-c ios uiview uistoryboard

我目前正在使用iOS 6.0。

我有一个需要具有特定尺寸的自定义UIView。如果我以编程方式初始化视图并添加它,那很好。但是,我找不到可以在故事板中设置视图大小的地方。

在故事板中设置其大小不起作用,因为故事板认为它是空的并将其大小设置为零。在viewDidLoadviewDidAppear中设置其大小不起作用,因为稍后大小将被_applyISEngineLayoutValue覆盖。

3 个答案:

答案 0 :(得分:1)

您可以在Interface Builder中执行此操作。打开您拥有视图的故事板并打开实用程序菜单:

enter image description here

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

enter image description here

在该菜单中,您可以设置视图的大小以及扩展方式。

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

enter image description here

来自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]];
}

答案 1 :(得分:1)

我遇到了同样的问题,我认为简短的回答是:在使用故事板时,你不能依赖于视图的init方法中的框架或边界。

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

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

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

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

  3. 如果它更方便,我有时只是在视图的ViewController中明确地执行特定于大小的初始化。 (不漂亮,但有时快速而简单。我并不自豪。)

答案 2 :(得分:0)

我遇到与您相同的问题,当我选择视图并切换到属性检查器时,进行设置 “Simulated Metrics”如下所示,我可以在Size检查器中调整视图大小。

确保将“大小”设置为“自由形式”或“无”

Simulated Metrics