initWithCoder为帧属性返回0值



我有子类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对滚动视图的帧进行任何高度调整。

我尝试过同样的事情使用xib文件,而不是使用故事板,它工作得很好。但是在我的项目中,我不想使用xib文件。

这将是非常伟大的,如果有人能解释我为什么我得到0值在initWithCoder:方法当我使用故事板?如果使用storyboard如何实现呢?

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

你在Storyboard中使用了自动布局吗?

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

如果确实需要自动布局,请尝试以下操作:

-(void)awakeFromNib
{
    [super awakeFromNib];
    [self setNeedsLayout];
    [self layoutIfNeeded];
    // self.frame will now return something :)
}

相关内容

  • 没有找到相关文章

最新更新