2013-04-18 66 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

相关问题