2013-03-06 73 views
2

我有子类uiscrollview并使用initWithCoder来准备我所有子视图的uiscrollview。我用下面的代码来设置它:initWithCoder为框架属性返回0值

- (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属性是非常重要的,因为我想使用故事板对scrollview的框架进行任何高度调整。

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

如果有人能解释我为什么在initWithCoder:方法中使用storyboard的时候会得到0值,那将会非常棒!如果使用storyboard如何实现这一目标?

PS:我注意到layoutSubviews方法的返回正确的帧信息,但

+0

退房这样的回答:http://stackoverflow.com/questions/12758782/how-can-i-set-the-size -U -view-init-with-storyboard/15892101#15892101 – AndrewCr 2013-04-09 02:11:42

+0

似乎工作的一个技巧:http://stackoverflow.com/a/5837133/294884 – Fattie 2014-03-30 16:39:58

回答

2

你在你的故事板使用自动布局我不能在这里创建我的子视图,因为它被调用为每一帧的变化(当我滚动)?

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

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

-(void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    [self setNeedsLayout]; 
    [self layoutIfNeeded]; 

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

你救了我的命...感谢洛特 – RayofHope 2015-02-16 14:29:49