1

我正在使用导航控制器进行导航。

我的根视图控制器的 UIView 包含我在 IB 中添加的 UIScrollView。我发现根据我的滚动视图当前可见部分,当我从这个视图导航到另一个视图并返回时,我发现事情非常随意。

希望这个描述有帮助

当我根本不滚动时,没有效果。

初始图像

当我前进并返回时,它保持不变。但是,当我滚动到滚动视图的底部时,如下图所示

带滚动的初始

然后向前导航,然后立即向后导航让我在这张照片上 最终状态

最后,我记录了这个滚动视图的所有边界、框架、内容大小,以发现以下奇怪的变化

2013-05-19 14:16:54.139 app2[1302:c07] {{0, 0}, {320, 392}}
2013-05-19 14:16:54.139 app2[1302:c07] {320, 456}
2013-05-19 14:16:54.140 app2[1302:c07] {{0, 0}, {320, 392}}

上面分别是初始bounds、contentSize、frame。下面是导航后返回。

2013-05-19 14:20:47.490 app2[1302:c07] {{0, 64}, {320, 392}}
2013-05-19 14:20:47.490 app2[1302:c07] {320, 456}
2013-05-19 14:20:47.491 app2[1302:c07] {{0, 0}, {320, 392}}

我不知道我做错了什么。请帮我。

代码 这是代码,操作滚动视图

[self.scrollView setCanCancelContentTouches:YES];
[self.scrollView setDelaysContentTouches:NO];
[self.scrollView setFrame:self.view.frame];
[self.scrollView setBounds:self.view.bounds];


- (IBAction)moreFiltersFunction:(UIButton*)sender {
sender.selected = !sender.isSelected;
if (sender.isSelected) {
    [self.scrollView addSubview:self.moreFiltersView];
    [self.scrollView setContentSize:CGSizeMake(320, self.scrollView.frame.size.height + 280)];
    [self.scrollView scrollRectToVisible:self.moreFiltersView.frame animated:YES];
} else {
    [self.moreFiltersView removeFromSuperview];
    [self.scrollView setContentSize:CGSizeMake(320, self.view.frame.size.height)];
}

}

4

1 回答 1

1

好的,首先您不需要设置滚动视图的边界,您只需使用框架即可。

来自另一个 SO 帖子的边界和框架概念的简短描述:( https://stackoverflow.com/a/1210141/2315974 )

UIView 的边界是矩形,表示为相对于其自身坐标系 (0,0) 的位置 (x,y) 和大小 (width,height)。

UIView 的 frame 是一个矩形,表示为相对于它所在的 superview 的位置 (x,y) 和大小 (width,height)。

另一件事,我不知道您何时调用此moreFiltersFunction操作,但值之间存在一些不一致。

  1. 您应该从 scrollView contentSize 的当前值更改 scrollView 内容大小添加或减去值。[self.scrollView setContentSize:CGSizeMake(320, self.scrollView.contentSize.height + 280)];

  2. 使用方法时要小心scrollRectToVisible,如果作为参数发送的rect已经可见,则scrollView不会滚动,并且该方法正在更改滚动视图内容偏移量。

于 2013-05-19T09:29:27.283 回答