【问题标题】:Horizontal UIScrollView inside custom UITableViewCell - using IB Storyboard - Not scrolling自定义 UITableViewCell 内的水平 UIScrollView - 使用 IB Storyboard - 不滚动
【发布时间】:2013-10-11 16:49:42
【问题描述】:

主要目标是能够水平滚动每一行的内容。

我正在尝试使用 X Code 5 和 StoryBoard 来做到这一点。

问题似乎很简单,但经过数小时的搜索后,除了一个有点相似但仅使用编程方法的问题之外,我什么也没找到see here

在 IB 中,我的结构如下图所示。

  • 在 IB 和代码中设置为 {5000, 500} 的滚动视图的内容大小
  • 滚动视图框架为 {0,0}{320,44}
  • 标签框架设置为 {20,0}{500,44}

我还提供了example project in a github repository。该示例还包括在 uitableviewcell 之外工作的“正常”滚动视图。

请说我忽略了一些非常基本的东西。

【问题讨论】:

  • 您找到解决方案了吗?我也有类似的情况。我的滚动视图在 UIViewController 中完美运行,但是当我放入 UITableViewCell 时,简单的不起作用。我使用 Xcode 5 和 iOS 7。
  • 还没有。但是我没有尝试过一民提出的解决方案。如果您先尝试,请在此处报告。
  • @marcoalves 你好,有更新吗?你修好了吗?
  • @Shady 不。我放弃了这个想法,转而使用另一个 UI 概念——一个更熟悉的概念。

标签: ios objective-c uitableview uiscrollview


【解决方案1】:

另一种方法是在自定义 UITableViewCell 中使用 UICollectionView

【讨论】:

【解决方案2】:

在您的故事板中激活了自动布局(这是一件好事)。 UIScrollView 的可滚动大小是根据其子视图的约束计算得出的。

所以你需要在 UIScrollView 里面的 UIImageView 上添加“top,bottom,leading,trailing space to superview”。它们都可以设置为 0。

现在,如果您不向 UIImageView 添加任何约束,则将使用它的 intrinsicContentSize 大小。

您的约束应如下所示:

请注意,您还缺少对单元格内容视图的约束。

完成约束后,从代码中删除所有 setContentSize: 调用。

【讨论】:

  • 这对我有用,但因为我在滚动视图中使用 UIView 而不是图像视图,所以我还需要在我的 UIView 上设置高度和宽度约束以使其正常工作。
【解决方案3】:

我遇到了同样的问题,发现删除滚动视图的内容视图并再次添加它可以工作:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.label removeFromSuperview];
    [self.scrollView addSubview:self.label];
    self.scrollView.contentSize = self.label.frame.size;
}

这不是最优雅的解决方案,但它对我有用。

【讨论】:

    【解决方案4】:

    确保在viewDidLayoutSubviewsscrollViewDidEndZooming:withView:atScale: 中调用setContentSize。在 iOS6 中,如果您没有这些方法中的代码,则默认行为可以正常工作,在带有新布局系统的 iOS7 中,它们是必需的。它可能会被多次调用以进行设置,请继续调用setContentSize

    【讨论】:

    • 谢谢一民。实际上,应用程序功能发生了变化,所以我现在不需要这个了。不过,我会在 github 代码上尝试您的建议,看看效果如何。我会很快回到这里并取得结果。
    • @Yimin 能否请您链接到说明上述方法需要放入viewDidLayoutSubviews 的文档?
    • @reecon - 在查看了许多关于 SO 的 cmets 后,我得出了结论。例如stackoverflow.com/questions/13439304/…。在撰写本文时,情况就是这样,也许现在不同了。
    【解决方案5】:

    我无法使用我的 xCode 4 访问您的 Storyboard

    首先,您应该将UITableView 与您的ViewController 连接起来。 UITableViewCell 在您的 UITableView 内。这就是为什么您应该尝试更改UITableView 的设置。连接后,您应该尝试像这样更改UITableViewcontentinset

    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 2500, 2500)];
    

    如果这不起作用,您还可以尝试更改 TableView 的内容大小。也许您还必须更改 UIView 的大小才能正常工作。

    【讨论】:

    • 我不太明白你的答案。您似乎在谈论在滚动视图中插入表格视图的情况,而我所问的情况并非如此。
    【解决方案6】:

    凭借其新的自动布局模式,iOS 7 似乎打破了许多使用 UIScrollView 的 iOS 6 及更早版本的应用程序。我最近发布了一个类似的问题[现在被版主搁置了 - 所以你可能看不到它] 用户 Lv.BeLeCk 发现成功的地方是:

    self.automaticallyAdjustsScrollViewInsets = NO;
    

    在持有滚动视图的视图控制器中。只需将它放在滚动视图的实例化之后。看看这是否有效,如果有效,请为他的贡献点赞。

    我认为根本原因是 UIScrollView 在实例化时会根据它们当前的内容更新它们的大小,而不是之前它们只是让它们一个人呆着。

    我不知道为什么 Apple 想要解决这个问题。我还在等待多行标签的上下对齐!

    【讨论】:

    • 它似乎不起作用。我想知道滚动视图是否必须在 uitablecellview 内
    【解决方案7】:

    我通过 IB 解决了这个问题。

    我必须在“标识值部分 - 用户定义的运行时属性”中具有相同的值,其中关键“帧 - 矩形 - CGRectValue”等于“尺寸检查器 - 视图值”。

    希望对您有所帮助。

    【讨论】:

      【解决方案8】:

      我今天也有同样的问题。 几个小时后继续查找,通过将单元格的选择从无更改回默认值来解决。 希望对其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 2020-11-19
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        • 2014-09-14
        • 2012-09-16
        相关资源
        最近更新 更多