【问题标题】:UIScrollView not showing scroll indicatorUIScrollView 不显示滚动指示器
【发布时间】:2011-01-02 08:04:44
【问题描述】:

我有一个 UIScrollView,我使用它动态创建和调整大小...

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width , length);

然后我将subviews 添加到UIScrollView。 我有scrollView.showsVerticalScrollIndicator = YES;

滚动时滚动指示器永远不会出现。

即使我打电话给[scrollView flashScrollIndicators] 也没有任何反应。

想法?

【问题讨论】:

  • 对我来说看起来不错。确定你没有将它设置回 NO?

标签: iphone cocoa-touch uiscrollview


【解决方案1】:

当 UIScrollView 是一个 48 px 高的水平带,可水平滚动时注意到这一点。也许 Cocoa 认为该区域对于滚动指示器来说太小了......

【讨论】:

  • 在这种情况下,滚动视图是屏幕长度的几倍,正好是屏幕的宽度。
【解决方案2】:

当我之前处理过这个问题时,在我的网格实现中,我偶尔会在滚动指示器的顶部看到一些单元格。为了解决这个问题,我现在在索引 0 处插入子视图,而不是添加它们,这会将它们添加到顶部。所以尝试这样的事情:

[scrollview insertSubview:subview atIndex:0];

【讨论】:

  • UICollectionView 是否有类似解决方案的机会?
  • 在我的例子中,类似的问题是通过向 scrollView 层添加更高的 zIndex 来解决的 -> self.scrollView.layer.zPosition = 1000;
【解决方案3】:

遇到同样的问题,找不到原因。最后一个答案给出了最后的提示:每当我添加新的子视图时,我首先从滚动视图中删除所有现有的子视图(显然还有滚动指示器)。

检查我的循环后,如果子视图确实是我想要删除的那种,滚动指示器就会出现:

for (NSObject * subview in [[[scrollView subviews] copy] autorelease]) {
    if ([subview isKindOfClass:[MySubView class]]) {
       [(MySubView*)subview removeFromSuperview];
    }
}   

更新:将代码更改为 Nikolai 的建议

【讨论】:

  • 这段代码中有一个微妙的错误:UIView 的subviews 方法返回视图使用的原始子视图数组。这意味着上面的代码在迭代数组时会对其进行变异。简单修复:遍历[[[scrollView subviews] copy] autorelease]
  • 为什么需要复制和自动发布?似乎没有必要。
  • 我做了完全相同的事情,在检查了我要删除的子视图的类型之后,它工作正常,ty ty ty。 :)
  • 我使用 UIImageView 作为子视图,滚动指示器似乎也是 UIImageView 的一种。
  • 与@chancyWu 完全相同的问题,我先添加UIImageView 并删除它们。这仍然会删除滚动指示器。通过跳过第一个子视图来修复它。
【解决方案4】:

如果 contentSize 太小而无法滚动表格视图,也会发生这种情况(至少在 UITableView 的情况下)。如果您启用了弹跳,那么表格视图实际上不会滚动,因此不会显示指示器。尝试在里面添加更多内容。

【讨论】:

  • 这是给我的——谢谢! ?? 当我的视图控制器显示为UIModalPresentationPageSheet 而不是UIModalPresentationFullScreen 时,我对为什么滚动指示器出现感到困惑……事实证明,高度差异足以确定我的内容是否都适合屏幕! ?
【解决方案5】:

我通过在添加新子视图后添加此代码来解决此问题:

self.showsVerticalScrollIndicator = NO;
self.showsVerticalScrollIndicator = YES;

【讨论】:

  • 这和涵盖我的指标的内容是我遇到问题的根源。
【解决方案6】:

如果滚动视图的父级水平方向小于滚动视图本身,也会发生这种情况:

滚动条粘在ScrollView / TableView 的右侧,并且由于父边界(例如隐藏它的 clipToBounds),该右侧不可见。

我已经看到了这个问题,所以我分享它以防万一。

只需检查ScrollView 框架的宽度,不要大于其父视图框架的宽度。

【讨论】:

    【解决方案7】:

    对我来说,水平指示器在我的 iOS 7 上的应用程序中神秘地消失了。后来发现由于某种奇怪的原因,我必须同时启用 Shows Horizontal Indicator 和 Shows Vertical Indicator 才能使水平指示器出现。如果我将它设置为不显示垂直指示器,它也不会显示水平指示器。

    【讨论】:

    • 叹息..第一世界iOS7问题。这解决了我的问题。
    【解决方案8】:

    两个条件,

    1. 如果您使用情节提要
    2. 如果您在 UIViewController 中使用 UITableView

    然后,您应该检查指标插图是否设置为 0(或与您的自动布局相关的任何其他数字):

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 1970-01-01
      • 2016-07-22
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2019-04-21
      • 2011-03-18
      相关资源
      最近更新 更多