更新:找到问题的原因,见下文。
我觉得这里有点尴尬,因为我的问题的答案可能很简单,但我一直在努力使用这段代码超过一天,我无法弄清楚发生了什么,所以这里云:
我已经创建了一个自定义的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中设置无自动调整行为可以解决此问题。
答案 0 :(得分:2)
我终于找到了导致这个UIView子类奇怪行为的原因。加载此视图作为其子视图的视图控制器是从Tab Bar加载的,其高度为49磅,因此让我思考。显然,在我的自定义初始化方法中重置视图的边界后,在界面构建器中选择的默认自动调整大小选项会导致视图调整大小。在Interface Builder中设置无自动调整行为可以解决此问题。