gpt4 book ai didi

ios - UIScrollView 不向下滚动

转载 作者:行者123 更新时间:2023-12-01 17:59:59 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,scrollview不向下滚动,只向上滚动。我有 scrollview在我的应用程序中,请查看我的编码

.....

self.scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320,427)];

[self.view addSubViews: self.scrollView];

UIView *blueView = [[UIView alloc] initWithFrame: CGRectMake(0, 47, 320, 320)];

blueView.backgroundColor = [UIColor blueColor];

[self.scrollView addSubViews: blueView];

self.scrollView.contentSize = CGSize(320, 640);

....

我的问题是无论我更改了什么值 contentSize , 我的 ScrollView只能向上滚动,不能向下滚动。我希望用户可以移动 blueView从原始位置移动到 iPhone 屏幕的顶部或底部。

你有这个问题吗?

最佳答案

问题

看起来您的问题在于您如何定位 blueViewscrollView 内.您正在设置 blueView 的框架到CGRect (0, 47, 320, 320) .当你像这样设置框架时,你隐含的一件事是:

The top edge of blueView is 47 points below the top edge of scrollView.



这是一个完全有效的说法,但这就是导致您描述的问题的原因。 scrollView不会向下滚动,因为它被设计为默认以 rect (0, 0, 320, 480) 开头在 View 中。 contentSize属性仅表示 UIScrollView 中内容的大小,而不是它的定位。当你设置它时,你基本上是在告诉 scrollView :

Starting from your content origin, the content is 320 points wide and 640 points tall.



因此, scrollView不会向上滚动,因为据它所知,坐标 (0, 0) 上方没有内容.

解决方案

您需要采取三个步骤来获得所需的功能。

  • 设置contentSize足够大以允许blueView一直向上和向下滚动。
  • blueViewscrollView 的垂直中心.
  • 滚动scrollView因此它最初以 blueView 为中心.


  • 设置contentSize足够大以允许blueView一直向上和向下滚动。

  • 我们要计算 contentSize 的正确值。属性(property)。它的类型为 CGSize ,所以我们需要两个部分: widthheight . width很简单——因为你似乎不想水平滚动,只要让它成为屏幕的宽度, 320 .高度有点棘手。如果你想要 blueView要在向上或向下滚动时触摸屏幕的顶部和底部,您需要做一些数学运算。正确的总高度将是屏幕高度的两倍,减去 blueView 的高度。 .所以:
    scrollView.contentSize = CGSizeMake(320, 480 * 2.0 - blueView.frame.size.height);
  • blueViewscrollView 的垂直中心.

  • 这很容易;只需设置 center blueView 的属性:
    blueView.center = CGPointMake(160, scrollView.contentSize.height / 2.0);
  • 滚动scrollView因此它最初以 blueView 为中心.

  • 如果您查看 Apple UIScrollView documentation ,你会看到一个实例方法 - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated .这正是您需要滚动 scrollView以编程方式。您想要的矩形是以 blueView 为中心的矩形, 与 iPhone 屏幕的大小。所以:
    CGRect targetRect = CGRectMake(0, scrollView.contentSize.height / 2.0 - 240,
    320, 480);
    [scrollView scrollRectToVisible:targetRect animated:NO];

    确保您在 viewWillAppear 中进行此滚动操作,所以当用户看到 View 时它就准备好了。

    应该是这样的。如果您有任何问题,请告诉我!

    关于ios - UIScrollView 不向下滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563331/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com