2013-03-06 111 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