我有子类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 :)
}