我以前用过UIScrollView,现在用它来的,从来没有问题。现在我将它添加到一个旧的应用程序,而它按预期工作(我可以看的内容,用手指左右滚动,所有的边界和尺寸设置正确的所以在内容中没有空间,等等。),我只是不能scrollToRectVisible工作。我甚至简化了呼叫,以便它仅仅移动到0,0位置:

 [scrollView scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:YES];

或移动到0200:

 [scrollView scrollRectToVisible:CGRectMake(0, 200, 10, 10) animated:YES];

我甚至做了一个快速的应用程序来测试这一点,我可以得到scrollRectToVisible为我期待在那里工作。但在我的旧的应用程序,我似乎无法让它做任何事情。

我可以使滚动视图滚动与setContentOffset:,但是这不是我想要的。

此滚动视图和其内容以IB笔尖被定义并用一个IBOutlet使用。我用我的应用程序来处理滚动视图的唯一代码是

 [scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, imageView.frame.size.height)];

(我只对垂直滚动感兴趣不是水平)。

有没有人遇到这样的问题?

我比较了滚动视图属性在这两个应用程序和它们相同。

附录:

我scrollViews帧是:0.000000 0.000000 480.000000 179.000000

我scrollViews contentSize是:0.000000 324.000000

它仍然就像我想滚动到RECT已经可见,并且不需要滚动。不知道如果这是发生了什么。这只是darnest事情。好像这样一件容易的事情来解决...

附录2:

这是我怎么想提出离不开scrollRectToVisible

CGPoint point = myRect.origin;
if (![clefScrollView pointInside:point withEvent:nil]) {
    point.x = 0;
    if (point.y > clefScrollView.contentSize.height - clefScrollView.bounds.size.height)
        point.y = clefScrollView.contentSize.height - clefScrollView.bounds.size.height;
    [clefScrollView setContentOffset:point animated: YES];
}

否则这个滚动视图一切正常,但scrollRectToVisible。为什么?!?任何乱撞?

有帮助吗?

解决方案

在一个月后,我终于想通了。虽然上述替代效果很好,它一直缠着我,我不得不终于弄明白。原来,这是一个愚蠢的错误的一些。

下面是旧的代码在我viewDidLoad中,我在那里建立了滚动:

[clefScrollView setContentSize:CGSizeMake(clefScrollView.contentSize.width, clefView.frame.size.height)];

滚动型高度或宽度的值不能为0!我想,这得到了过去的我,因为我是假设滚动型尺寸开始了一个有效的大小,而我错过了一个事实,就是尺寸是零!

此工作的:

[clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];

希望这有助于有人在那里。我肯定花了太多的时间去调试这一点。

其他提示

呀,我还没有与scrollRectToVisible:animated:成功,但总是setContentOffset:animated:对我的作品。出于好奇,为什么你不希望使用setContentOffset:animated:?这似乎是适当的解决方案。

您可能要检查,并看到了滚动的delaysContentTouches属性设置为NO

如果你打电话给你滚动视图的子视图内触摸的方法scrollRectToVisiblesetContentOffset那么你的滚动视图可以通过延迟触摸拿着东西。

所以,一定要设置在你的滚动视图以下。

scrollView.delaysContentTouches = NO;

您将最有可能能够使用和不使用动画设置为YES移动滚动视图。

我有像这样,它不工作

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, someKnownValue);

我只是改变了contentSize的高度,所以我不认为这会给我任何问题,但它确实...

不得不将其改变为这

scrollView.contentSize = CGSizeMake(someOtherKnownValue, someKnownValue);

原来scrollView.contentSize.width不一定是从设置为一个有效的值开始走,所以最好给它一个特定值

上面的建议的解决方案仍可能得到一个错误,如果还没有设置为“clefScrollView”帧。

如果上述方案中被使用并且仍然具有同样的问题,确保您已到设定的内容视图初始化您scollView(在这种情况下clefScrollView)帧之前。



    clefScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,320,450)];

    [clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];



一个晚一点的游戏,但我有同样的问题。虽然我绝对有我的滚动视图的内容大小设置是否正确 - 甚至过分地对高度值。即使经过广泛的检查验证框架和内容的大小 - 仍然没有工作。我不得不调整“边界”框的高度,那么一切伟大的工作。

我有同样症状,因为这issue..the scrollRectToVisible按预期不工作。我的问题是,在故事板滚动视图有一个模糊的约束问题。一旦固定电话的工作就好了。这是别的东西来检查时,按预期下,scrollRectToVisible电话不能正常工作。

有关我的问题是,在一个子视图的约束是不明确。 检查您内容的每个约束被设置,即使你不需要它显然是布局。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top