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

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

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

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

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

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

感谢任何建议。

【问题讨论】:

    标签: swift


    【解决方案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 的东西。我会试一试,但似乎仍然很投入,并且不确定它如何与自动布局一起使用。我还将阅读集合视图。听起来很有希望。
    • 再次感谢您的建议。我可以选择创建多个子视图,获取它们的宽度并设置滚动视图。一切都很好。
    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多