UICollectionView不在ScrollView内部滚动(水平)

时间:2018-09-26 19:15:08

标签: ios swift uiscrollview uicollectionview

我需要使用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屏幕截图

enter image description here

它使我看到以下屏幕

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

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

我的问题是

  1. 如何使UICollectionView在UIScrollView中水平滚动
  2. 如果在UIScrollView中添加UICollectionView不是一个好主意,那么我要使用哪种组件来实现布局? (如果您可以提供帮助)

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

的工作代码

谢谢。

3 个答案:

答案 0 :(得分:0)

好吧,罪魁祸首是遵循代码,约束条件,并且一切都设置正确,但是当我在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
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

当您忘记在集合视图中选择“HORIZONTAL”时!

默认情况下它们是垂直的,行为与“无法滚动”相同。