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

前端之家收集整理的这篇文章主要介绍了ios – 使用自动布局时,UIScrollView内容大小重置为零前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > UIScrollView doesn’t use autolayout constraints4个
我正在使用autolayout来改变我的scrollview的高度.我在scrollview中添加了一些子视图,我手动增加内容大小.但当我得到一个我即将改变高度的事件时,内容大小为零.

这是代码

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

     }];

}

解决方法

如果将自动布局与UIScrollView一起使用,则不要设置contentSize属性.有关更多信息,请参阅 here(向下滚动到UIScrollView上的部分).
原文链接:https://www.f2er.com/iOS/334596.html

猜你在找的iOS相关文章