2013-04-18 68 views
8

我使用autolayout來更改我的scrollview的高度。我添加了一些subviewsscrollview我手動增加內容大小。但是當我得到一個事件時,我即將改變高度的內容大小爲零。使用自動佈局時,UIScrollView contentsize重置爲零

下面是代碼:

-(void) addTag:(NSString *)tagName { 

    ... 
    [button addTarget:self action:@selector(tagPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [self setContentSize:CGSizeMake(self.frame.size.width, self.contentSize.height+60)]; 
    [self.items addObject: button]; 
    NSLog(@"content height: %0.2f", self.contentSize.height); 


} 

控制檯輸出:

2013-04-18 18:23:06.106 TouchSelectApp[19944:c07] content height: 120.00 

在這裏,我輸出的contentSize:

- (void)tagPressed:(UIButton *)sender { 

    NSLog(@"1 content height: %0.2f", self.contentSize.height); 
    ... 
} 

控制檯顯示:

2013-04-18 18:17:24.747 TouchSelectApp[19944:c07] 1 content height: 0.00 

我不爲什麼內容高度設置爲零。幫我!

更新:這是我想解決的問題。

我有一個按鈕的滾動視圖。最初它只顯示一個按鈕。當按下按鈕時tagPressed:被調用。標籤按下更改高度以顯示所有按鈕。然後,當用戶選擇一個按鈕時,滾動視圖的高度將更改爲原始值,並將偏移量設置爲按鈕的原點。下面的代碼有效,但動畫全部錯誤。如果我更改偏移量並在動畫塊之前,它只是將偏移量設置爲零。

- (void)tagPressed:(UIButton *)sender { 

    CGPoint p; 
    float maxHeight = self.items.count * 60; 


    if (self.height.constant == maxHeight) { 
     self.height.constant = 60; 
     p = CGPointMake(0, sender.frame.origin.y-5);  
    }else { 
     self.height.constant = maxHeight; 
     p = CGPointMake(0, 0); 
    } 

    [self.superview setNeedsUpdateConstraints]; 

    [UIView animateWithDuration:0.5f animations: ^{ 
      [self.superview layoutIfNeeded]; 
    } completion:^(BOOL finished) { 
      [self setContentOffset:p]; 

    }]; 

}

+0

我將用原始問題更新帖子。 –

+0

我不明白你爲什麼需要滾動視圖。您有一個視圖,顯示一個按鈕或顯示所有按鈕;滾動在哪裏?只需使用改變大小的視圖即可。更好的是,只需按需顯示和隱藏按鈕,或許。 – matt

+0

請注意,滾動視圖使*用戶*可以滾動。 *你可以滾動(即顯示一個特定的按鈕)沒有滾動視圖,所以如果這就是你想要做的一切,我會建議避免滾動視圖,這增加了很多併發症,你不需要(到目前爲止據我所知)。 – matt

回答

10

如果您使用自動佈局與UIScrollView,你不設置contentSize屬性。有關更多信息,請參閱here(向下滾動至UIScrollView部分)。

+2

我真的想改變內容偏移量。我怎樣才能做到這一點? –

+2

您可以在ViewDidLayoutSubviews中設置ContentSize。可以算出正常,我使用自動佈局 即 - (無效)viewDidLayoutSubviews { [_scrollView setContentSize:CGSizeMake(_scrollView.width * [_imageViews計數],0)]; } – Yasper

相關問題