2016-04-29 83 views
1

我正在使用自動佈局。以編程方式將UIScrollView添加到UIView不能在viewDidLoad中工作,但在viewDidAppear中工作?

我像下面的代碼一樣以編程方式向uview查看scrollview。我試圖運行initShopView在視圖加載但它只是不工作,並沒有添加滾動視圖來查看。我已經看到了視圖層次結構的捕獲。

class variables: 

@property(strong,nonatomic) UIScrollView *shopScrollView; 
@property(strong,nonatomic) UIView *headView; 
@property(strong,nonatomic) UIButton *favoriteButton; 


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self initShopView];// not work 

} 

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    [self initShopView];// will work 
} 

-(void)initShopView{ 
    self.shopScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.superview.frame.size.height - slideTitleHeight)]; 
    self.shopScrollView.contentSize = CGSizeMake(self.view.frame.size.width, 800); 
    self.headView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 100)]; 

    self.favoriteButton = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width - 60, 10, 55, 55)]; 
    [self.favoriteButton setTitle:@"Favorite" forState:UIControlStateNormal]; 
    [self.favoriteButton setImage:[UIImage imageNamed:@"favoriteGreen.png"] forState:UIControlStateNormal]; 



    [self.headView addSubview:self.favoriteButton]; 
    [self.shopScrollView addSubview:self.headView]; 
    [self.view addSubview:self.shopScrollView]; 
} 

@Phillip Mills給出瞭解決方案。我的滾動視圖幀

self.shopScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.superview.frame.size.height - slideTitleHeight)]; 

解決的辦法是:

self.shopScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - slideTitleHeight)]; 
+0

你在哪裏使用autolayout?對於以編程方式創建的視圖,您必須以編程方式添加自動佈局。 –

回答

3

viewDidLoad中,您的視圖沒有superview,因爲它尚未被插入到視圖層次結構中。這意味着你將滾動視圖的高度設置爲零。

如果您使用Xcode的視圖調試,您將在列表中看到滾動視圖,但帶有「錯誤的」框架。

+0

是的你是對的,我重新編寫滾動視圖框= CGRectMake(0,0,self.view.frame.size.width,self。 view.frame.size.height - slideTitleHeight)];它的工作原理 –

0

這是viewDidAppear方法你得到一個視圖的實際佈局(幀)b'coz。

要在viewDidLoad中工作,您需要在[self initShopView];方法的上方調用這些方法。

[self setNeedsLayout];

[self layoutIfNeeded];

注意:當您使用自動佈局則建議不要設置的圖幅。您只需要給予約束即可將其置於正確的位置。

+0

您的意思是:[self.view setNeedsLayout]; [self.view layoutIfNeeded];?我只是嘗試調用這些方法在initShopView之前加載視圖,仍然無法正常工作 –

0

而不是創建框架,使用AutoLayout設置您的意見。它也可以在viewDidLoad中工作。 幀使視圖渲染更加複雜,並且無法在所有設備大小上正常工作。

相關問題