Tag: uicollectionview

在Xamarin.iOS中捕捉UICollectionView

我在玩Xamarin.iOS UICollectionView控件,试图使其表现得像UIPageViewController ,即,我想要的是在滚动水平集合时的捕捉/滑动效果。 我的愿望清单上的另一个功能是屏幕尺寸,例如具有足够空间的项目可以显示上一个和下一个项目内容的一小部分,因此应用程序用户可以轻松地理解该集合以及该集合可以被捕捉/滑动水平地。 从我的角度来看,这种行为可以提高应用程序的用户体验。 这是我想到的演示。 这是在Xamarin iOS应用程序中实现所描述行为的最简单,最可靠解决方案的重要部分。 首先,扩展UICollectionViewDelegateFlowLayout并重写GetSizeForItem , GetInsetForSection , GetMinimumLineSpacingForSection方法以设置所需项目的大小和间距。 然后重写WillEndDragging方法,以在应用手势后滚动所需的项目。 其次,请确保设置UIScrollView.DecelerationRateFast 。 最后,不要忘记使用UICollectionViewScrollDirection.Horizontal 。 我将其设置在HorizontalCollectionViewFlowLayout ,该GetInvalidationContextForBoundsChange也用于重写GetInvalidationContextForBoundsChange方法,以便在设备旋转期间强制重新计算项目的宽度。 就是这样。 不要犹豫,使用我上载到GitHub的演示Xamarin.iOS项目。 Pavel-Sulimau / SnappingUICollectionView 捕捉Xamarin.iOS UICollectionView。 通过创建一个 github.com 来为Pavel-Sulimau / SnappingUICollectionView开发做出贡献。 资料来源: https://docs.microsoft.com/zh-cn/xamarin/ios/user-interface/controls/uicollectionview https://stackoverflow.com/questions/29658328/uicollectionview-horizo​​ntal-paging-not-centered https://medium.com/@shaibalassiano/tutorial-horizo​​ntal-uicollectionview-with-paging-9421b479ee94 https://stackoverflow.com/questions/33855945/uicollectionview-snap-onto-cell-when-scrolling-horizo​​ntally http://aplus.rs/2015/how-to-invalidate-flow-collection-view-layout-on-rotation/

UITableView中的多个集合视图

我们是否曾经想过需要多个水平可滚动CollectionView的场景? 如果是,则继续。 我们将逐步进行。 让我们开始 打开Main.storyboard并添加UIViewController。 在UIViewController中添加UITableView并在tableview内添加tableviewcell 在UITableViewCell中添加一个UICollectionView并在其中添加一个UICollectionViewCell 将UITableView的约束设置为UIViewController为 topMargin = 0,leftMargin = 0,rightMargin = 0,bottomMargin = 0 4.在UICollectionViewCell中添加一个新图像,在所有上面添加之后,结构将如下图所示 5.接下来,我们必须将CollectionView的可滚动方向设置为水平。 6.将UITableview委托和数据源连接到UIviewController本身。 7.添加UITableViewCell类型的新文件,并将Storyboard中的CollectionView与新添加的文件连接。 类TableViewCell:UITableViewCell,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {@IBOutlet弱var collectionView:UICollectionView!} 8.接下来,在ViewController中,我们将实现UITableView的数据源。 表视图中的numberOfSection将等于所需的collectionview的数量。 在UIViewController中添加以下代码 导入UIKit类ViewController:UIViewController,UITableViewDelegate,UITableViewDataSource {@IBOutlet弱变量tableView:UITableView!部分:Int)->字符串? {返回“ Section Title \(section)”}}重写func didReceiveMemoryWarning(){super.didReceiveMemoryWarning()//处理所有可以重新创建的资源。} func numberOfSections(在tableView中:UITableView)-> Int {return 5} func tableView(_ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int {返回1} func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell {如果让单元格= tableView.dequeueReusableCell(withIdentifier:“ tableViewCell”,的:indexPath)为? TableViewCell {返回单元格}返回UITableViewCell()}} 9.添加一个类型为UICollectionViewCell的新文件。 […]

使用UICollectionView构建自适应的自适应iOS应用

UICollectionView是一个UIKit视图,用于管理已订购商品的集合,并使用可自定义的布局显示商品。 它是由Apple在WWDC 2012中随iOS 6 SDK发行而引入的。 UICollectionView接口与旧的UITableView非常相似,因为它提供DataSource作为显示数据的源,并提供Delegate处理每个项目的交互。 与UITableView在UITableViewCell内部使用固定列表布局显示每一行不同, UICollectionView通过子类化UICollectionViewLayout为开发人员提供了灵活性和可自定义性以提供自己的布局,它还支持自定义装饰视图,每个单独的横断面图和单元格的可自定义大小。 Apple本身提供了一种UICollectionViewFlowLayout布局,称为UICollectionViewFlowLayout 。 UICollectionViewFlowLayout是使用网格系统显示项目的布局,并支持页眉和页脚。 它还提供了2个垂直和水平滚动方向。 在垂直方向上,项目的宽度受集合视图的宽度限制,因此在每一行中,它会尝试在下降到下一行之前在集合视图宽度的范围内填充尽可能多的项目,因此用户可以垂直滚动内容。 在水平方向上,内容的高度受集合视图的高度限制,因此在每一列中,在向右移动到下一列之前,将尽可能多地添加项目,以便用户可以水平滚动。 如果要使用集合视图构建圆盘传送带,则水平滚动方向非常适合。 我们将建立什么 在本文中,我们将使用UICollectionViewFlowLayout构建一个自适应的电影列表应用程序,以适应从小型iPhone 5到最大iPad Pro的各种UICollectionViewFlowLayout 。 用户将具有使用列表,小网格和大网格布局显示电影的选项。 以下是我们将要执行的任务: 启动项目。 建立模型。 构建MainListViewController 。 构建列表布局。 构建网格布局。 开始项目 要开始项目,您可以在下面的GitHub存储库中下载入门项目。 alfianlosari /响应式iOS收集视图启动器 带有Collection View的自适应和自适应iOS App的入门项目… github.com 入门项目包含多个资产,用于列表的集合视图单元格以及我们将用于集合视图的网格项目布局。 建立模型 让我们创建代表电影的模型。 创建一个新文件,并将其命名为Movie.swift 。 复制下面的声明以创建具有所有属性的Movie结构。 我们还需要确保更新MovieLayoutListCollectionViewCell ,在这里我们创建一个方法setup(movie:)以便在通过电影时可以设置标签和图像视图。 建立网格布局 让我们构建网格布局,在此布局中,每个单元格将仅在每个单元格内显示电影的海报图像。 窥视入门项目提供的MovieLayoutGridCollectionViewCell ,以查看布局。 确保更新MovieLayoutGridCollectionViewCell ,在这里我们创建一个方法setup(movie:)以便在通过电影时可以设置图像视图。 结论 最后,恭喜!我们已经成功使用Collection View构建了自适应的自适应iOS应用程序! 借助Cocoa Touch […]

使用UIDynamicAnimator的可滚动BottomSheet

我们将仅使用UICollectionView实现BottomSheet ,对具有可滚动内容的UIView frame进行动画处理不是一个好主意。 UIView frame更改和UIScrollView内容更改无法正常协同工作且难以处理,如果您也遇到此问题,并且想要实现双向连续动画的BottomSheet ,请继续阅读,我们将仅对UIScrollView的contentOffset进行动画处理。 我们应该知道什么 拥有UIDynamicAnimator和UICollectionView丰富知识将大有帮助,我从本教程中了解到有益的知识。 整个想法 我们以某种方式使UIScrollView contentOffset属性符合UIDynamicItem然后可以使用UIDynamicAnimator对其进行动画UIDynamicAnimator 🙂 ContentOffsetDynamicItem UICollectionView本身作为UIView符合UIDynamicItem ,但我们不想为其frame设置动画,我们希望为其contentOffset设置动画,因此我们需要包装器为我们做这件事。 “知识的最大敌人不是无知,而是知识的幻觉。” —斯蒂芬·霍金 我很高兴听到您的反馈。 🙂

SwiftSpringBoard:实现iOS主屏幕布局

SwiftSpringBoard是一个旨在重现iOS主屏幕图标配置和功能的项目。 对SwiftSwiftBoard的需求来自我们的一位客户,该客户在其iOS应用程序的主屏幕上使用集合视图。 该客户愿意提供Apple风格的主页按钮重新排序功能以及隐藏单元格的功能。 我们需要一个能够完成以下功能的组件: 以与在iOS主屏幕上显示应用程序相同的方式呈现项目 在屏幕的一个或多个页面上对元素进行重新排序(通过拖放) 从屏幕上删除元素 我们要做的第一件事当然是查找可以满足我们需求的可用框架。 如果您自己这样做,您可能会得出与我们相同的结论:首先,很少有框架与我们的目标相关,其次,截至2017年11月,大多数可用工具尚未得到更新。至少两年。 我们的库依赖于4种类型的对象: SpringBoardView:显示主屏幕样式项的视图(UICollectionView的子类) SpringBoardManager:实现视图行为核心逻辑的对象 SpringBoardDataSource:应用程序用来设置组件的协议 SpringBoardLayout:视图使用的自定义布局(UICollectionViewFlowLayout的子类) 为了最大程度地减少麻烦和不必要的重新实现(并最大程度地了解世界各地的知识),SwiftSpringBoard组件主要使用UICollectionViews中的标准行为:自iOS 9.0起,UICollectionViews本身就可以提供适合基本功能的重新排序机制需要。 此外,自iOS 2.0起,UIScrollViews即可使用分页。 这些功能结合在一起,为我们满足需求提供了坚实的起点。 我们设计了SpringBoardDataSource协议,以便经典UICollectionView机制的用户不会迷路。 首先,用户必须设置其跳板将在单个页面上使用的列数和行数。 为此,用户必须实现以下方法: 对于水平滚动,将逐列加载项目: 问题是,由于主屏幕中的分页是水平进行的,因此我们必须坚持水平滚动。 但是,正如您所看到的,垂直滚动将项目放置的方式与预期放置首页项目的方式相同。 因此,我们必须以垂直布局的方式自己计算项目位置。 计算项目位置本身意味着要处理项目的创建和删除,否则我们将保留对无用变量的引用,这些变量在使用UIKit的默认组件时肯定会导致崩溃,并且我们不会意识到将新项目添加到视图中,这意味着它们永远不会被显示。 布局还必须处理无法完全填充的页面,这是我们在主屏幕上可以看到的行为。 经过大量故障排除后,我们成功处理了布局及其几次更新。 但是组件的部分逻辑仍必须由用户处理,因为他是唯一可以完全访问加载在弹簧板上的原始数据的用户。 假设您的跳板数据由存储在一个名为dataContent的主数组中的数字数组组成 。 您对SpringBoardDataSource的实现应如下所示: 到目前为止,我们打算改进SwiftSpringBoard的几种方法包括: 动态列和行计数:这将是我们的下一个发展。 从今天起,用户必须手动设置其行数和列数以用于布局以正确计算尺寸。 我们希望仅基于布局的插图和间距属性以及项目的固定大小来自动计算行数和列数。 处理文件夹:尽管用户已经可以实现此行为,但我们正在寻找一种干净简单的方法将此功能添加到我们的库中。 一种选择是为打开的文件夹创建SpringBoardView的另一个实例。 如果您碰巧使用了我们的组件,我们真的会对您将如何使用它感到好奇。 如果您有任何问题/建议,请随时与我们联系。 Wassa是室内定位和计算机视觉领域的创新数字代理专家。 无论您是想帮助客户在建筑物中找到自己的出路,增强产品的用户体验,收集有关客户的数据还是分析某个地点的人流量和行为,我们的创新实验室都将科学的专业知识带给您最大的设计灵感根据您的目标调整解决方案。 在 – 找到我们: Facebook和Twitter 领英 的GitHub 我们的网站

在Swift中使用泛型配置多个单元格

iOS开发人员将大部分开发时间用于处理UITableView和UICollectionView。 当您需要显示具有相同数据类型的列表(例如用户列表)时,这非常简单。 但是,如果您需要在一个表视图中显示一堆不同的单元格呢? 这可能导致真正的混乱! 让我们想象以下情况。 我们需要显示具有不同类型单元格的提要; 它可以是UserCell , CommentCell , ImageCell等。 最明显的解决方案是在方法tableView(_:cellForRowAt :)中创建if语句,其外观如下所示。 希望该解决方案能对您的项目有所帮助。 示例项目在GitHub上可用。 谢谢阅读。

使用相同数组的不同索引处的对象填充CollectionView和TableView

我想在CollectionView中显示“group_type”== 1的产品,在TableView中显示“group_type”== 2的产品。 我想填充TableView的顺序,其中“group_title”将作为行的数组“产品”中的节标题和产品。 以下是我的JSON。 我需要什么Swift代码? "product_groups": [ { "group_title": "Recommended", "group_type": 1, "products": [ { "product_id": 1, "product_name": "Product 1", "product_price": "Rs 1,999/-", "product_category": "Equipment & Chairs", "product_image": "https://project-isdental-cammy92.c9users.io/api/images/products/product_1.jpg", "product_description": "Description 1" }, { "product_id": 2, "product_name": "Product 2", "product_price": "Rs 1,999/-", "product_category": "Equipment & Chairs", "product_image": "https://project-isdental-cammy92.c9users.io/api/images/products/product_1.jpg", "product_description": "Description 1" }, { "product_id": […]

如何在UICollection View单元中显示图像,同时单击swift ios中的单元格?

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! PlaceCollectionViewCell //let imageView = UIImageView() //cell.backgroundColor = UIColor(colorLiteralRed: 0.278, green: 0.694, blue: 0.537, alpha: 1.00) cell.layer.borderWidth = 0.5 cell.layer.borderColor = UIColor(colorLiteralRed: 0.278, green: 0.694, blue: 0.537, alpha: 1.00).cgColor //cell.placeLabel.tintColor = UIColor(colorLiteralRed: 0.278, green: 0.694, blue: 0.537, alpha: […]

我被困在呈现UICollectionViewController中单元格的完整图像

我在我的应用程序中有一个UICollectionViewController ,我希望在用户点击它时在一个特定的单元格中生成图像。 对不起,麻烦,因为我是一个iOS的初学者。 根据我的知识,它将被呈现在一个新的View controller ,如果是/否,那么如何? 提前致谢。

UICollectionView单元格不占用UICollectionView的宽度

UICollectionView的宽度将随每个设备而改变,因为它被限制到达视图的水平边界。 collectionView的布局是Flow。 我使用UICollectionView的唯一原因是在不同的设备尺寸上均匀分布图像,所有这些图像都会有一个轻击手势识别器。 而行的数量是可变的,因为图像图标的数量会有所不同。 显然这是我之后的方法: func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { return CGSize(width: collectionViewWidth/6, height: collectionViewWidth/6); } 我试图这样做: var collectionViewWidth: CGFloat = 0.0 override func viewDidLoad() { super.viewDidLoad() collectionView.dataSource = self } override func viewDidAppear(animated: Bool) { collectionViewWidth = collectionView.collectionViewLayout .collectionViewContentSize().width } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath […]