UIScrollView更改边界

时间:2013-05-19 08:53:37

标签: ios objective-c uiview uiscrollview

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

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

希望这个描述有帮助

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

Initial Image

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

Initial With Scroll

然后向前导航,然后立即向后移动我的照片 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}}

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

}

1 个答案:

答案 0 :(得分: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方法时要小心,如果作为参数发出的rect已经可见,则scrollView将不会滚动,此方法也会更改滚动视图内容偏移量。

    < / LI>