initWithCoder为frame属性返回0值

时间:2013-03-06 16:04:52

标签: uiscrollview storyboard initwithcoder

我已经对uiscrollview进行了分类,并使用initWithCoder准备了包含所有子视图的uiscrollview。我使用下面的代码来设置它:

- (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder])) {

    NSLog(@"%f", self.frame.size.height);

    self.contentSize = CGSizeMake(5000, self.frame.size.height);

    labelContainerView = [[UIView alloc] init];
    labelContainerView.frame = CGRectMake(0, 0, self.contentSize.width, self.contentSize.height/2);
    labelContainerView.backgroundColor = [UIColor yellowColor];
    [self addSubview:labelContainerView];
}

但是这仍然失败,因为self.frame属性总是返回0值。使用 self.frame 属性对我来说非常重要,因为我想使用storyboard对scrollview框架进行任何高度调整。

我尝试使用xib文件而不是使用故事板,但它工作正常。但在我的项目中,我不想使用xib文件。

如果有人能解释我为什么在initWithCoder中获得0值,那么真的很棒:我使用storyboard时的方法?如果使用storyboard如何实现这个目标?

PS:我注意到 layoutSubviews 方法返回正确的帧信息,但是我无法在这里创建我的子视图,因为它会在每次帧更改时被调用(当我滚动时)

1 个答案:

答案 0 :(得分:2)

你在故事板中使用Autolayout吗?

如果你真的没有利用它,你可以禁用它,你的-initWithCoder:方法将再次返回你的帧。

如果确实需要Autolayout ,请尝试以下操作:

-(void)awakeFromNib
{
    [super awakeFromNib];

    [self setNeedsLayout];
    [self layoutIfNeeded];

    // self.frame will now return something :)
}