我正在使用导航控制器进行导航。
我的根视图控制器的UIView包含我在IB中添加的UIScrollView。我发现取决于我的scrollView当前可见部分,当我从这个视图导航到另一个并返回时,我发现事情是非常的。
希望这个描述有帮助
当我根本不滚动时,没有效果。
当我前进并返回时,它保持不变。 但是,当我滚动到我的滚动视图的底部时,如下图所示
然后向前导航,然后立即向后移动我的照片
最后,我记录了此滚动视图的所有边界,框架,内容大小,以找到以下奇怪的更改
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}}
以上是初始边界,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}}
我不知道我做错了什么。请帮帮我。
代码 这是代码,操纵scrollView
[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)];
}
}
答案 0 :(得分:1)
好的,首先你不需要设置滚动视图的边界,你只需要使用框架。
来自另一个SO帖子的边界和框架概念的简短描述:(https://stackoverflow.com/a/1210141/2315974)
UIView的边界是矩形,表示为位置 (x,y)和相对于其自身坐标系的尺寸(宽度,高度) (0,0)。
UIView的框架是矩形,表示为位置(x,y) 和相对于它所包含的超视图的大小(宽度,高度) 内。
另一件事,我不知道你什么时候调用这个moreFiltersFunction
动作但是值之间有一点不一致。
您应该从scrollView contentSize的当前值更改scrollView内容大小的添加或减少值。 [self.scrollView setContentSize:CGSizeMake(320, self.scrollView.contentSize.height + 280)];
使用scrollRectToVisible
方法时要小心,如果作为参数发出的rect已经可见,则scrollView将不会滚动,此方法也会更改滚动视图内容偏移量。