【问题标题】:UICollectionView Does Not Scroll (Horizontal) Inside ScrollViewUICollectionView 在 ScrollView 内不滚动(水平)
【发布时间】:2018-09-26 19:15:07
【问题描述】:

我需要使用 IB 实现以下布局

http://www.giphy.com/gifs/tK0FNSHglOSyg8sVWx

我目前正在使用以下结构

UIScrollView
    - Content View (UIView)
        - Image Slider (FSPagerView)
        - Clinic Name (UILabel)
        - Clinic Slogan (UILabel)
        - Line Separator View
        - Clinic Profile (UITextView)
        - Section View (Custom UIView)
        - Doctors View (UICollectionView) - Horizontal Scrolling

IB的PFB截图

它为我呈现以下屏幕

http://www.giphy.com/gifs/fxkcxS2GbJCCQcaiCD

正如您在上面的 GIF 中看到的,布局正在工作,但是我很难让 Collection View 在 UIScrollView 内水平滚动

我的问题是

  1. 如何让 UICollectionView 在 UIScrollView 中水平滚动
  2. 如果在 UIScrollView 中添加 UICollectionView 不是一个好主意,我应该使用什么组件来实现我想要实现的布局? (如果你能帮助这个想法)

PS:我尝试了 StackOverflow 和其他来源的几乎所有解决方案,以使 UICollectionView 在 UIScrollView 内可滚动,但没有任何效果,但是我已经以编程方式实现了类似的布局(没有 IB 和自动布局),它可以工作,供您参考,这里是我正在使用的工作代码https://iswift.org/playground?dmHCmv&v=3

谢谢。

【问题讨论】:

  • 您的收藏视图上的约束是如何设置的?宽度是否限制为滚动视图的宽度?您使用的是默认流布局还是自定义?
  • 你能分享你的代码和xib吗?您尝试设置:(内容视图)。 clipsToBounds = true,我想你不会看到 CollectionView。
  • @NguyenHoan 我稍后会尝试分享。我尝试在 ScrollView 中使用 CollectionView 和一个使用 IB 的新(测试)项目,它可以工作,这似乎肯定是 Autolayout 或相关的问题。
  • @NguyenHoan 是的,我尝试将 clipsToBound = true 设置为内容视图,正如您所说,集合视图不显示,但其余内容显示,为什么会这样?
  • 我认为您的约束不正确-> UIScollView 的 contentsize 高度不足以显示 collectionview。详细介绍

标签: ios swift uiscrollview uicollectionview


【解决方案1】:

好吧,罪魁祸首是遵循代码,约束并且一切都设置正确,但是当我在 viewWillLayoutSubviews 中更新高度约束的常量时,虽然常量值得到了更新,但集合视图滚动停止工作。在这里,我在 IB 中搜索问题,认为这是一个约束问题。

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    self.clinicSloganLabelHeightConstraint.constant = estimatedFrameFor(
        text: self.clinicSloganLabel.text!,
        font: self.clinicSloganLabel.font!,
        width: self.clinicSloganLabel.frame.width
    ).height
    self.clinicProfileTextViewHeightConstraint.constant = self.clinicProfileTextView.sizeThatFits(
        CGSize(width: self.clinicProfileTextView.frame.width, height: .infinity)
    ).height
    self.scrollView.contentSize.height = 2000.0
}

【讨论】:

    【解决方案2】:

    如果有人遇到此问题并且您正在以编程方式设置scrollview contentSize,请尝试为scrollview contentView(或滚动视图内的子视图容器的任何视图)创建一个出口并设置约束常量而是滚动视图的内容视图。

    【讨论】:

      【解决方案3】:

      只是一个警告,一个非常愚蠢的恼人错误是:

      当您忘记在收藏视图中选择“水平”时!

      它们默认是垂直的,行为与“不能滚动”相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-21
        • 2016-09-17
        • 1970-01-01
        • 2013-10-18
        • 1970-01-01
        相关资源
        最近更新 更多