我已经对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 方法返回正确的帧信息,但是我无法在这里创建我的子视图,因为它会在每次帧更改时被调用(当我滚动时)
答案 0 :(得分:2)
你在故事板中使用Autolayout吗?
如果你真的没有利用它,你可以禁用它,你的-initWithCoder:方法将再次返回你的帧。
如果确实需要Autolayout ,请尝试以下操作:
-(void)awakeFromNib
{
[super awakeFromNib];
[self setNeedsLayout];
[self layoutIfNeeded];
// self.frame will now return something :)
}