【发布时间】:2011-03-22 02:10:22
【问题描述】:
我有一个 UIView 的子类,它需要根据它的宽度来计算它的高度。在代码中创建时,一切正常。但是,当我尝试在界面生成器中创建视图时,虽然我覆盖了所有相关方法,但我无法获得界面生成器中设置的视图大小。
- (id)initWithCoder:(NSCoder *)aDecoder
{
NSLog(@"init with coder before super width %d",super.frame.size.width); // returns 0
self = [super initWithCoder:aDecoder];
NSLog(@"init with coder after super width %d",super.frame.size.width); // still returns 0
}
- (void) awakeFromNib
{
NSLog(@"width of view %d",super.frame.size.width); // Returns 0 as well
}
- (void) setFrame:(CGRect)aFrame
{
[super setFrame:aFrame]; // Called from initWithCoder by super. Correct frame size.
}
所以我的下一个猜测是,我的视图的超级视图可能是在 awakeFromNib 之后设置我的视图框架。事实证明它没有。我在视图上覆盖了 setFrame,它在 initWithCoder 期间被调用。
这就是我目前所知道的:
- 第一个 initWithCoder 被调用
- 在 initWithCoder 期间,会发送对 setFrame:(CGRect)aFrame 的调用
- 在setFrame中框架的大小是正确的,我调用[super setFrame:aFrame]
- awakeFromNib 被调用
- super.frame.size.width = 0 in awakeFromNib self.frame.size.width 也是 0
- 完成该过程后,视图似乎比预期的位置低了几个像素,但我想我的代码与尺寸过于密集,这可能是我要做的事情。
任何帮助将不胜感激
【问题讨论】:
-
这个问题现在其实全错了。我自己发布了一个答案,由于某种原因被删除。我的主要错误是在浮动时使用 %d 打印帧大小。那完全让我失望了。据我所知,您的回答实际上并没有做任何事情。
标签: iphone uiview interface-builder nib