按预期工作的UIScrollView但scrollRectToVisible:什么都不做(UIScr

2019-07-18 13:32发布

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

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

或者将其移动到0,200:

 [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 。 为什么?!? 任何乱撞?

Answer 1:

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

这里是原来的代码在我viewDidLoad中,我在那里建立了滚动:

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

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

这工作:

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

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



Answer 2:

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



Answer 3:

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

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

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

scrollView.delaysContentTouches = NO;

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



Answer 4:

我曾经有过这样的,它没有工作

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

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

必须将其更改为这

scrollView.contentSize = CGSizeMake(someOtherKnownValue, someKnownValue);

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



Answer 5:

建议的解决方案上面,如果您没有设置为“clefScrollView”框架仍然可以给出一个错误。

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



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

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





Answer 6:

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



Answer 7:

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



Answer 8:

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



文章来源: UIScrollView works as expected but scrollRectToVisible: does nothing