问题标签 [contentoffset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4026 浏览

ios - 在 UICollectionView/UITableView 中为滚动视图的偏移设置动画会导致单元格过早消失

我们有一个 UICollectionView,其自定义布局与 UITableView 非常相似(它垂直滚动)。UICollectionView 只同时显示 3 个单元格,其中一个是当前活动的单元格:

(这里的活动单元格是#2。)单元格大约 280 点高,因此只有活动单元格在屏幕上完全可见。用户不直接滚动视图进行导航,而是水平滑动活动单元格以前进到下一个单元格。然后我们做一些花哨的动画并滚动 UICollectionView 使下一个单元格处于“活动”位置,从而使其成为活动单元格,将旧单元格移开并调出队列中的下一个单元格:

这里的问题是设置 UICollectionView 的偏移量。self.collectionView.contentOffset = targetOffset;我们目前将它与其他三个动画属性一起设置在 UIView 动画块(运行,甚至在延迟间隔完成之前。这绝对不理想。

我已经想到了一些解决方案,但无法找出最好的解决方案:

  1. 荒谬地扩大 UICollectionView 的框架以适应五个单元格而不是三个单元格,从而迫使它将单元格保留在内存中,即使它们不在屏幕上。我试过这个并且它有效,但它听起来像一个非常肮脏的黑客。

  2. 对消失的单元格的渲染内容进行快照,将其放入 UIImageView 中,在单元格消失之前将 UIImageView 添加为滚动视图的子视图,在旧单元格的完全相同位置,一旦动画结束就将其删除。听起来不像以前的选项那么糟糕(至少在记忆方面),但仍然有点老套。我也不知道实现这一点的最佳方法,请指出正确的方向。

    1. 切换到 UIScrollView 的setContentOffset:animated:. 我们实际上曾经有这个,它修复了消失的单元格问题,但与其他 UIView 动画并行运行显然会争夺主线程的注意力,从而在单核设备上创建一个非常不稳定的动画(iPhone 3GS/ 4)。它也不允许我们更改动画的持续时间或缓动,因此感觉与其他动画不同步。如果我们能找到一种方法使其与 UIView 块动画协调工作,仍然是一个选择。

    2. 切换到 UICollectionView 的scrollToItemAtIndexPath:atScrollPosition:animated:. 还没有尝试过,但它有一个很大的缺点:目标滚动位置只需要 3 个可能的常量(至少适用于这种情况) UICollectionViewScrollPositionTopUICollectionViewScrollPositionCenteredVerticallyUICollectionViewScrollPositionBottom. 活动单元格可以改变其高度,但它始终必须距窗口顶部 35 点,并且这些选项不能提供足够的控制来完成设计。它也可能与 3.1 一样有问题。仍然是一个选项,因为可能有一种方法可以绕过我不知道的滚动位置,并且它可能与主线程没有相同的问题,这似乎不太可能。

任何帮助将不胜感激。请询问您是否需要澄清。非常感谢!

0 投票
1 回答
1140 浏览

objective-c - UIScrollView:更准确/精确的 contentOffset 值?

我想知道是否有任何方法contentOffset可以获得更准确contentOffset的 当我的变化率非常小时,我试图执行一个动作,但是 0.5f 不够精确。contentOffsetUIScrollViewcontentOffsetUIScrollView

任何帮助是极大的赞赏。

0 投票
0 回答
724 浏览

uiscrollview - UIScrollView 滚动时内容偏移重置

当用户拉下表格视图以使其可见时,我希望能够显示表格的部分标题视图。同样,当用户将标题推到视野之外时,我想隐藏它。

为此,我设置了一个内容插图来隐藏表格的顶部。我还设置了一个内容偏移来隐藏我想要显示的部分

问题是,当我滚动视图时,内容偏移量似乎会重置并显示我想要显示的部分,即使我将表格向上推也是如此。

这个问题阻止我使用scrollViewWillEndDragging:withVelocity:targetContentOffset:targetContentOffset动画内容偏移相对于我滚动的方向。

这是我的代码(在viewDidAppear:

它是在滚动时更改的内容偏移的属性,还是我没有考虑到这里发生的其他事情?

一如既往的感谢

0 投票
5 回答
27187 浏览

objective-c - 检测 UIScrollView 位置

我正在尝试在我的 iOS 应用程序中使用 UIScrollView 作为导航设备。基本上,我希望应用程序根据启用分页的 UIScrollView 的位置加载特定内容。它有点像导航轮。

目前,我有一个两页(2*320)的滚动视图,我正在使用scrollViewDidEndDragging委托方法并contentoffset.x加载适当的内容。我尝试这样确定滚动视图的位置:

我的问题是我要么不了解如何使用 contentoffset,要么不适合处理我的问题。无论哪种方式,我都被困住了。有人可以让我知道我哪里出错了和/或告诉我一个更有效的方法来确定滚动视图的位置吗?

我很愚蠢,我忘了提到问题是什么......基本上,我无法跟踪滚动视图的位置。当我移动到第二页时,它只会在我超过 620 限制(向右反弹)时记录更改。但是当我回到起始位置(第 1 页)时,它确实记录了更改。换句话说,我的跟踪不准确。

代表和其他一切工作正常,我记录他们!

0 投票
3 回答
556 浏览

objective-c - 从另一个 ViewController 设置 UIScrollView 的位置

我正在尝试通过使用 contentOffset 来设置 UIScrollView 的位置:

在我关闭它之前,我从另一个视图控制器调用这个方法,一切都检查出来了。我正确传递了参数,并调用了该方法(使用 NSLog 检查),但滚动视图没有移动......

有趣的是,当我从它所在的视图控制器调用此方法时,它工作正常。只有当我从另一个视图控制器调用它时,它才会停止工作。

仅供参考,这里是调用方法:

内容偏移量是我预先设置的 CGPoint。在这里没关系;此外,无论如何它都会正确传递。

0 投票
6 回答
2126 浏览

uiscrollview - 默认情况下在 UICollectionView 中滚动 UISearchBar

我正在开发一个使用 UICollectionView(实际上是 PSUICollectionView)的项目,并且我在这个集合视图的顶部添加了一个 UISearchBar。我现在想做的是默认滚动这个搜索栏,直到用户把它拉下来。这种行为在 UITableView 中很容易实现,但是 UICollectionView 的 contentSize 直到 viewDidAppear 才被初始化!所以将 contentOffset 的 Y 设置为搜索栏高度没有任何效果,除非它是在 viewDidAppear 中完成的(这不是我想要的)。有人想出将 UISearchBar 与 UICollectionView 一起使用,以及如何使其默认滚动关闭吗?

谢谢!-阿米特

0 投票
15 回答
53310 浏览

iphone - UITableView contentOffSet 无法正常工作

在中,我viewWillAppear已将. 当视图加载时,我隐藏在使用 contentOffSet 的. 当用户拉下 tableview 时,会显示搜索栏。UISearchBarUITableViewUISearchbarUINavigationBarUITableView

添加 headerview 后,我使用下面的代码将其隐藏。

但有时contentOffSet并没有隐藏headerview。可能是什么错误。

0 投票
1 回答
169 浏览

ios - contentOffset 跳过 Log 中的值

所以我有以下代码:

输出是:

我现在的问题是:为什么它会“跳过”(例如为什么“actualPosition”从来没有这些值)485-489、491-511 和 513-549?它不应该为所有“位置”记录/给出actualPosition这个值,即使我滚动得更快?它对浮点数的工作方式相同,所以这无关紧要。我该如何解决这个问题,以便实际位置接收已滚动的每个位置的值?

0 投票
0 回答
1580 浏览

iphone - UIScrollView 内容偏移量自动被重置

今天我遇到了一个奇怪的问题,我已经解决了这个问题,但是我不知道为什么会出现这个问题。场景如下

我有一个滚动视图,我将其内容偏移设置为

但是滚动视图委托首先将其偏移量设置为 800,然后是 48,然后是 28,即在表单的非滚动位置。

但是,如果我将它设置为 75 或任何其他数字,例如 80 90 甚至 100,它的工作正常。我也在使用

在这两种情况下。为什么会发生这种情况,为什么 800 不工作而 75 工作。

然后滚动视图内容大小为 (320,1010)。

代码:

0 投票
2 回答
328 浏览

objective-c - 如何执行“如果内容偏移量大于...”的操作

我已经到处找了几个小时,找不到适合我的解决方案。我要做的就是让我的应用程序在 uiscrollview 中的内容位置高于某个位置且低于另一个位置时执行某些操作。我希望这是有道理的。这是我认为可行的代码:

任何帮助将不胜感激!

编辑:如果忘记提及,如果我做了一个“if”语句来说明如果 contentOffset 等于它开始时的 contentOffset,则执行该操作。看起来 contentOffset 保持在加载应用程序时给出的值。我应该在应用程序的前面提到,我将 contentOffset 设置为一个值,但我不知道这是否会影响任何事情。