2013-05-19 57 views
1

我正在使用导航控制器进行导航。UIScrollView更改界限

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

希望这说明,让

当我不滚动可言,没有什么效果。

Initial Image

当我向前走,并返回它仍然是相同的。 然而,当我滚动到我的滚动型的底部,如图所示如下图

Initial With Scroll

然后向前导航,然后立即落后国家我在这PIC Final State

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

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}} 

以上是初始博unds,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)]; 
} 

}

+0

问题是你contentOffset。如果要更改某处的内容偏移量,请确保在推送之前不调用该方法。 – danypata

+0

@danypata:请看看我更新的帖子。我在我操纵scrollView的地方添加了代码。请让我知道如果我做错了什么。还请解释我如何contentOffset和界限有关? –

+0

我遇到同样的问题。你有没有想过如何解决它?我也看到了界限,当我浏览回到我的滚动视图被改变,但我不想手动设置的界限,因为我使用的自动布局无所不为。 – Camputer

回答

1

好了,所以首先你并不需要设置你只需要滚动视图的边界与框架一起工作。

边界和帧的概念从另一个SO交的简短说明:(https://stackoverflow.com/a/1210141/2315974

一个的UIView的边界是矩形,表示为位置 (X,Y)和大小(宽度,高度)相对于其自己的坐标系 (0,0)。

UIView的框架是矩形,表示为位置(x,y) 和大小(宽度,高度)相对于它包含的超级视图 之内。

另一件事,我不知道你什么时候调用这个moreFiltersFunction动作,但是值之间有点不一致。

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

  2. 使用scrollRectToVisible方法时,如果sended作为参数RECT已经可见要小心,滚动视图不会滚动,这种方法也被改变滚动视图内容偏移。

+0

感谢您的回复。现在我理解了bounds和contentOffset之间的关系。但是这仍然不能解决我的问题。这次我登录了我的contentOffset,我发现它们之间的关系。 –

+0

如果你找到了答案,将其标记为接受这样的问题不会出现在'unanswered'部分出现。 – danypata

+0

不幸的是,这并没有解决我的问题。发现的方法是边界,框架,contentSize和contentOffset设置在viewWillAppear中方法的一些默认值,但我并不感到满意。 –