从IB加载后调整UIView的框架

时间:2011-08-24 14:32:05

标签: ios uiview interface-builder frame

更新:找到问题的原因,见下文。

我觉得这里有点尴尬,因为我的问题的答案可能很简单,但我一直在努力使用这段代码超过一天,我无法弄清楚发生了什么,所以这里云:

我已经创建了一个自定义的UIView子类。到目前为止,我已将代码隔离到导致我头痛的部分:

-(id) initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        self.backgroundColor = [UIColor greenColor];
        self.frame = CGRectMake(0, 0, 320, 60);
        NSLog(@"%@", NSStringFromCGRect(self.frame));
    }
    return self;
}

从XIB文件加载自定义视图时,将调用此代码。此代码尝试调整视图的大小。它这样做,并且NSLog语句在传递给视图时返回相同的CGRect。但是,无论我提供什么价值,矩形的高度始终比预期的小50个点。

如果我使用类似代码以编程方式创建视图,则会正确绘制矩形:

-(id) initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.backgroundColor = [UIColor orangeColor];
        self.frame = CGRectMake(0, 0, 320, 60);
        NSLog(@"%@", NSStringFromCGRect(self.frame));
    }
    return self;
}
它让我疯了。什么可能导致这种情况?

作为一个额外的问题,一旦应用程序在iPhone模拟器中运行,我可以使用哪些方法来分析/可视化视图的维度?

//更新:

我终于找到了导致这个UIView子类奇怪行为的原因。加载此视图作为其子视图的视图控制器是从Tab Bar加载的,其高度为49磅,因此让我思考。显然,在我的自定义初始化方法中重置视图的边界后,在界面构建器中选择的默认自动调整大小选项会导致视图调整大小。在Interface Builder中设置无自动调整行为可以解决此问题。

1 个答案:

答案 0 :(得分:2)

我终于找到了导致这个UIView子类奇怪行为的原因。加载此视图作为其子视图的视图控制器是从Tab Bar加载的,其高度为49磅,因此让我思考。显然,在我的自定义初始化方法中重置视图的边界后,在界面构建器中选择的默认自动调整大小选项会导致视图调整大小。在Interface Builder中设置无自动调整行为可以解决此问题。