我想知道是否有人可以指导我朝正确的方向发展。
我正在制作一张带有2张uiscrollviews的uiview。 1是垂直的,另一个是视图的一半,是水平的。
我有结构设置,因为我可以向下滚动到水平,然后我可以水平滚动5页(硬编码)。水平滚动视图启用了分页并占据了屏幕的整个宽度(自动布局)。这一切都很好。 uiscrollview包含在带有约束的uiview中。
5个(页面)子视图中的每一个都包含相同的元素(日期,名称,标题,图像等全部居中)但是内容正在从coredata中解析。第1页=乔,第2页=简等
我在解决问题的部分是如何构建这些基本上的子视图。如果我在uiscrollview中放置一个标签,则会在第2页的屏幕上滚动。您会建议在具有相同元素但内容不同的滚动视图中处理5(或10)个页面的最佳方法是什么?
感谢任何建议。
答案 0 :(得分:1)
如果我理解正确,请查看UICollectionView
s。他们非常投入,但他们就像一个超级动力的UITableView
,几乎可以做任何事情(包括基本的分页和水平/垂直滚动。
尝试使用单行设置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-loop变量,以便页面边对边并填满屏幕。当然,根据自己的情况调整配方。
重新阅读您的问题后,可能只是您想要一个静态标签,根据页面中可滚动的内容来更改其内容。为此,将UILabel
作为子视图添加到包含scrollView的同一父视图中,在 UIScrollView
后添加(或只调用bringSubviewToFront
使它的z-index向前),使它的位置独立于scrollView。要使用页面滚动进行更新,请加入func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
并从targetContentOffset
通过
let offset = targetContentOffset.memory
let page = Int(offset.x / scrollView.frame.size.width)
然后使用页面作为索引填充数据数组中的标签(但请务必检查数组边界,因为滚动过任一边可能会产生-1
或array.count
甚至更多)。
快乐的编码,抱歉有很多选择!如果我仍然没有回答你的问题,请告诉我