滚动视图只显示最后一个动态添加的子视图

Posted

技术标签:

【中文标题】滚动视图只显示最后一个动态添加的子视图【英文标题】:Scrollview only showing last dynamically added subview 【发布时间】:2016-08-08 09:19:49 【问题描述】:

我正在尝试将我的故事板中的视图添加到 UIScrollView。我需要将视图添加 X 次,并使用 for 循环来完成此操作

sectionViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SectionViewController") as! SectionViewController

...

for index in 0..<numberOfSections 
            let subViewFrame = CGRectMake(self.scrollView.frame.size.width * CGFloat(index), -64, self.view.frame.size.width, self.view.frame.size.height)

            let subView = sectionViewController.view
            subView!.frame = subViewFrame
            subView.tag = index

            self.scrollView .addSubview(subView!)
        

ScrollView 是这样以编程方式创建的

self.scrollView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)

self.scrollView.pagingEnabled = true
self.scrollView.alwaysBounceVertical = false

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * CGFloat(numberOfSections), 0)
self.scrollView.scrollsToTop = false

scrollViewFrame = CGRectMake(0, 100, self.scrollView.frame.size.width, self.scrollView.frame.size.height)

self.scrollView.frame = scrollViewFrame

self.view.addSubview(self.scrollView)

所以我在此之后添加子视图。问题是只显示最后一个子视图。所以当 numberOfSections = 10 时,只显示第 10 个子视图。我在这里做错了什么?

【问题讨论】:

【参考方案1】:

不是为所有索引分配相同的视图作为子视图(让 subView = sectionViewController.view),而是为每个索引创建不同的 SectionViewController 视图实例

【讨论】:

我试过了,现在根本看不到任何子视图。你说的很有道理,所以它一定是别的东西。【参考方案2】:

根据@Annie_Dev 的建议尝试为 even 分配不同的颜色并添加子视图以检查是否添加了子视图。

【讨论】:

现在和所有子视图都获得了不同的背景颜色,但只有最后一个显示故事板中的子视图。不知道可能出了什么问题。【参考方案3】:

所以经过大量的挖掘和尝试,我终于找到了问题所在。我的子视图中有很多相互冲突的约束。一旦我修复了这些,一切都会正常显示。

【讨论】:

以上是关于滚动视图只显示最后一个动态添加的子视图的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式添加的子视图框架不会显示在滚动视图中

画外音模式 - 滚动到在滚动视图中关闭的子视图

Scrollview 只显示我在 swift 3 中使用情节提要创建的视图中的最后一个数组元素?

iOS:为啥我的子视图在滚动视图中出现大间距

滚动视图上不显示文本视图

滚动到表格视图的最后一行只滚动一半