uiscrollview 中的可重复内容 - Swift

Posted

技术标签:

【中文标题】uiscrollview 中的可重复内容 - Swift【英文标题】:Repeatable content in uiscrollview - Swift 【发布时间】:2015-08-11 04:48:57 【问题描述】:

我想知道是否有人可以指导我正确的方向。

我正在布置一个带有 2 个 uiscrollviews 的 uiview。 1 个是垂直的,另一个在视图的一半处是水平的。

我的结构设置为可以向下滚动到水平页面,然后可以水平滚动 5 页(硬编码)。水平滚动视图启用了分页并占据了屏幕的整个宽度(自动布局)。这一切都很好。 uiscrollview 包含在带有约束的 uiview 中。

5 个(页面)子视图中的每一个都包含相同的元素(日期、名称、标题、图像等都居中),但是内容是从 coredata 解析的。第 1 页 = 乔,第 2 页 = 简等

我无法解决的部分是如何构建这些本质上的子视图。如果我在 uiscrollview 中放置一个标签,这将在第 2 页上滚动到屏幕之外。您建议在滚动视图中处理 5(或 10)页具有相同元素但内容不同的最佳方法是什么?

感谢任何建议。

【问题讨论】:

【参考方案1】:

如果我理解正确,请查看UICollectionViews。他们非常投入,但他们的行为就像一个超级强大的UITableViews,几乎可以做任何事情(包括基本的分页和水平/垂直滚动。

尝试使用单行设置 UICollectionViewFlowLayout 并使元素填满整个页面(例如,使用 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 动态调整单元格大小以填充您的视口) 然后将UICollectionViewCell 子类化为您想要的那种“页面”。

这有点牵扯,你会阅读很多 docs 但这可能是做你想做的最好的方式,如果你决定你想要超过 5-10 页,它很容易扩展或者你想要为每个页面添加更多 UI。

一个不那么灵活的更简单的替代方法是创建一个带有方法/初始化程序的UIView 子类,以便用您需要的数据填充它,然后对所有数据运行一个 for 循环,创建UIScrollView 内的页面,其中每个的框架是 CGRect(x: screenWidth * i, y: 0, width: screenWidth, height: yourHeight),其中 i 是您的 for 循环变量,以便页面边缘到边缘并填满屏幕。当然根据自己的情况调整公式。


重新阅读您的问题后,您可能只是想要一个静态标签,该标签会根据页面中可滚动的内容更改内容。为此,将UILabel 作为子视图添加到包含滚动视图的同一父视图中,将其添加 UIScrollView 之后(或者只需调用bringSubviewToFront 以将其作为z-index forward) 使其位置独立于滚动视图。要使用页面滚动更新它,请连接到 func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) 并通过

targetContentOffset 计算页面
let offset = targetContentOffset.memory
let page = Int(offset.x / scrollView.frame.size.width)

然后使用页面作为索引从数据数组中填充标签(但请确保检查数组边界,因为滚动到任一边缘可能会产生 -1array.count 甚至更多)。

编码愉快,抱歉有多种选择!如果我仍然没有回答您的问题,请告诉我

【讨论】:

感谢您的选择。我尝试了一个静态标签,但它没有“滚动”并且看起来不太好。我刚刚发现在 for 循环中使用多个 uiview 的东西。我会试一试,但似乎仍然很投入,并且不确定它如何与自动布局一起使用。我还将阅读集合视图。听起来很有希望。 再次感谢您的建议。我可以选择创建多个子视图,获取它们的宽度并设置滚动视图。一切都很好。

以上是关于uiscrollview 中的可重复内容 - Swift的主要内容,如果未能解决你的问题,请参考以下文章

带有空 UIScrollView 的可滚动内容大小歧义(XCode 6)

Swift:以编程方式添加视图时,UIScrollView 的可滚动内容大小不明确,而不使用 IB

限制UIScrollView中的可滚动区域

UIScrollView 中的可访问性问题

AngularJS 表单。 JSON中的可选属性[重复]

使用重复的结束页面的无限 UIScrollView