使用自动布局时,UIScrollView内容大小重置为零

Ven*_*Rao 8 objective-c uiscrollview ios autolayout

我正在autolayout改变我的身高scrollview.我加一些subviewsscrollview那里我手动增加内容大小.但当我得到一个我要改变高度的事件时,内容大小为零.

这是代码:

-(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);


}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

 2013-04-18 18:23:06.106 TouchSelectApp[19944:c07] content height: 120.00
Run Code Online (Sandbox Code Playgroud)

这里我输出contentSize:

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

    NSLog(@"1 content height: %0.2f", self.contentSize.height);
    ...
}
Run Code Online (Sandbox Code Playgroud)

控制台显示:

 2013-04-18 18:17:24.747 TouchSelectApp[19944:c07] 1 content height: 0.00
Run Code Online (Sandbox Code Playgroud)

我不知道为什么内容高度设置为零.帮我!

更新:这是我想解决的问题.

我有一个带按钮的滚动视图.最初它只显示一个按钮.按下按钮时,将调用tagPressed:.Tag Pressed更改高度以显示所有按钮.然后,当用户选择按钮时,滚动视图的高度将更改为原始高度,并且偏移量将设置为按钮的原点.以下代码有效,但动画完全错误.如果我更改偏移量并在动画块之前,则只将偏移量设置为零.

- (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];

     }];
Run Code Online (Sandbox Code Playgroud)

}

fum*_*007 10

如果使用带有a的自动布局,UIScrollView则不设置contentSize属性.有关更多信息,请参见此处(向下滚动到上一节UIScrollView).

  • 我真的想改变内容偏移量.我怎样才能做到这一点? (2认同)
  • 您可以在ViewDidLayoutSubviews中设置ContentSize.使用Autolayout对我来说很好,即 - (void)viewDidLayoutSubviews {[_scrollView setContentSize:CGSizeMake(_scrollView.width*[_imageViews count],0)]; } (2认同)