我知道如果您正在做任何"像网格或基于行的破坏布局",那么记录的建议是使用UICollectionView Flow Layout.但是,我不确定这是否属实.
我想要一个网格,但不想要一个换行符布局.物品应水平和垂直无限布局,无需堆叠.基本上,如果内容超出框架,则可以水平或垂直滚动的巨型棋盘.
要继承UICollectionView 流布局,我必须:
prepareLayout以阻止布局包装项目.这似乎很多工作.collectionViewContentSize.Apple表示他们在制作UICollectionView Flow Layout 方面做了大量的努力工作,所以如果可以,我应该利用它.但是,如果我必须覆盖prepareLayout以关闭断线,我怀疑我正在丢弃他们的大部分工作.在剩下的工作中,我可能不会使用大部分工作(例如minimumLineSpacingForSectionAtIndex).
因为我想要的布局是如此简单,我怀疑我应该继承UICollectionViewLayout,因为:
prepareLayout在两种情况下都要覆盖,我怀疑这是所有艰苦工作的地方.我的结论是否正确?
我有一个基本网格UICollectionView.这是一个简单的2列,多行布局使用UICollectionViewDelegateFlowLayout.选择单元格后,我想调暗背景,将单元格浮动到屏幕中心,然后根据所选单元格设置工作流程.我很新UICollectionViews,而且我不确定最好的方法.
UICollectionView在选择单元格时,我应该有for 的自定义布局吗?
或者有一种方法可以动画选定的单元格,而无需创建新的布局
如果有人能让我朝着正确的方向前进,我想我会很好地研究如何执行它.
ios uicollectionview uicollectionviewcell uicollectionviewlayout
我正在尝试使用所谓的"自我调整单元",这意味着:
estimatedItemSize上flowLayoutpreferredLayoutAttributesFittingAttributes细胞类例如:UICollectionView具有自动布局的自定义单元格
我需要这样的动态效果:http://www.teehanlax.com/blog/implementing-a-bouncy-uicollectionviewlayout-with-uikit-dynamics/
没有UIDynamic,它工作正常,但我需要UIDynamic.正如我所看到的那样,它会调用prepareLayout并且layoutAttributesForElementsInRect直到死亡,将会有太多_updateVisibleCellsNow排队等待.
我不知道如何解决这个问题,如果你看到,请帮助我.或者,如果我以错误的方式使用这些技术,请告诉我.
ios uicollectionview uicollectionviewcell uicollectionviewlayout uikit-dynamics
我正在寻找一种UIPageViewController用a 替换原生水平分页的方法UICollectionView.
到目前为止,我做了以下事情:
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.itemSize = collectionView.frame.size
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 10
collectionView.setCollectionViewLayout(layout, animated: false)
collectionView.isPagingEnabled = true
collectionView.alwaysBounceVertical = false
Run Code Online (Sandbox Code Playgroud)
这工作正常,我得到水平分页效果.
现在我想要添加的页面之间的水平空间(像你将做UIPageViewControllerOptionInterPageSpacingKey的UIPageViewController)
到目前为止,我无法在不损坏分页效果的情况下添加空格.我正在寻找与以下相同的行为UIPageViewController:单元格应该填满整个屏幕宽度,并且单元格之间的空间应该只在切换页面时可见.
uikit ios uipageviewcontroller uicollectionview uicollectionviewlayout
我正在构建一个UICollectionViewLayout支持自动调整单元格的自定义,当估计项目高度大于最终高度时,我遇到了问题.当首选布局属性触发部分失效时,下面的某些单元格变为可见,并非所有单元格都应用了正确的框架.
在下图中,左侧屏幕截图显示了具有较大估计高度的初始渲染,右侧图像显示了估计高度小于最终高度的位置.
在iOS 10和11上会出现此问题.
使用较小的估计高度,布局期间内容大小会增加,并且首选布局属性不会导致更多项目移动到可见矩形中.集合视图完美地处理这种情况.
失效和帧计算的逻辑似乎是有效的,所以我不确定为什么集合视图不处理部分失效导致新项目进入视图的情况.
当更深入地检查时,看起来将被移动到视图中的最终视图被无效并被要求计算它们的大小,但是它们的最终属性未被应用.
这是用于演示目的的自定义布局的非常精简版本的布局代码,它展示了这个故障:
/// Simple demo layout, only 1 section is supported
/// This is not optimised, it is purely a simplified version
/// of a more complex custom layout that demonstrates
/// the glitch.
public class Layout: UICollectionViewLayout {
public var estimatedItemHeight: CGFloat = 50
public var spacing: CGFloat = 10
var contentWidth: CGFloat = 0
var numberOfItems = 0
var heightCache = [Int: CGFloat]()
override public func prepare() {
super.prepare()
self.contentWidth …Run Code Online (Sandbox Code Playgroud) 我一直在复制2013 WWDC Session 217"探索iOS 7上的滚动视图".我正在使用Xcode 7 beta 2,我的项目仅限iOS 9.
我试图以类似于会话217中提供的方式UIDynamicAnimator使用my UICollectionViewLayout来模仿Messages.app的感觉.我UICollectionViewLayout是一个习惯性的,出于某种原因,我的细胞似乎在我的项目中以圆周运动反弹.
这是我的自定义布局代码.
// Didn't write this code myself, but should be pretty simple to follow. @Goles
#import "VVSpringCollectionViewFlowLayout.h"
@interface VVSpringCollectionViewFlowLayout()
@property (nonatomic, strong) UIDynamicAnimator *animator;
@end
@implementation VVSpringCollectionViewFlowLayout
-(id)init {
if (self = [super init]) {
_springDamping = 0.5;
_springFrequency = 0.8;
_resistanceFactor = 500;
}
return self;
}
- (id)initWithCoder:(nonnull NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
_springDamping = 0.5;
_springFrequency …Run Code Online (Sandbox Code Playgroud) ios uicollectionview uicollectionviewlayout uidynamicanimator swift
在Apple的Photo's App上,如果在滚动到任意偏移的同时旋转设备,预先在中心的相同单元将在旋转后终止于中心.
我试图用UICollectionView实现相同的行为.' indexPathsForVisibleItems '似乎是这样做的方式....
以下代码提供了旋转之间的平滑操作,但中心项计算似乎是关闭的:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
self.collectionView?.collectionViewLayout.invalidateLayout()
let middleItem = (self.collectionView?.indexPathsForVisibleItems.count / 2) - 1
let indexPath = self.collectionView?.indexPathsForVisibleItems[middleItem]
coordinator.animate(alongsideTransition: { ctx in
self.collectionView?.layoutIfNeeded()
self.collectionView?.scrollToItem(at: indexPath!, at: .centeredVertically, animated: false)
}, completion: { _ in
})
}
Run Code Online (Sandbox Code Playgroud)
uiscrollview ios uicollectionview uicollectionviewlayout swift
我的布局代码非常简单,您将在有关新组合布局的每个教程或文章中看到这一点。
func createLayout() -> UICollectionViewLayout {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
item.contentInsets = .init(top: 0, leading: 5, bottom: 0, trailing: 5)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.93), heightDimension: .fractionalHeight(1.0))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
section.orthogonalScrollingBehavior = .groupPagingCentered
let layout = UICollectionViewCompositionalLayout(section: section)
return layout
}
Run Code Online (Sandbox Code Playgroud)
当我启动应用程序时,单元格未正确居中。只有当我将单元格拖动最微小的量时,它才会弹到正确的位置。
前:
当我拖动它一点点后:
我还没有看到任何关于同样问题的问题。Twitter 或博客上没有人谈论它。不确定我在这里做错了什么?
我正在使用 UICollectionView 组合布局,并希望有一个粘在顶部的标题
这应该可以与
header.pinToVisibleBounds = true
Run Code Online (Sandbox Code Playgroud)
但是,在滚动过程中,标题会奇怪地被遮挡,看起来像一个错误...此外,看起来只有位于可见屏幕之外的单元格,当重新加载时,会遮挡标题
你可以在这个视频中看到它 https://www.dropbox.com/s/n5myzfceuiwzb39/stackoverflow-unsatable-header.mov?dl=0
这就是整个布局的构建方式
func buildLayout() -> UICollectionViewCompositionalLayout {
// cells
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.5), heightDimension: .absolute(90))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
item.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(90))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitem: item, count: 2)
group.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20)
group.interItemSpacing = .fixed(10)
let section = NSCollectionLayoutSection(group: group)
section.interGroupSpacing = 10
section.contentInsets = NSDirectionalEdgeInsets(top: …Run Code Online (Sandbox Code Playgroud) cocoa-touch uicollectionview uicollectionviewlayout swift uicollectionviewcompositionallayout
该应用程序在 Xcode 12 和 iOS 14 之前工作正常,但一旦我升级到 Xcode 13 / iOS 15,我的应用程序就停止工作,并显示以下错误日志
2021-11-26 12:49:38.844428+0530 Mitaja[6170:102791] [UICollectionViewRecursion] cv == 0x7feb458e0000 Enabling recursion trigger logging
2021-11-26 12:49:39.040798+0530 Mitaja[6170:102791] [UICollectionViewRecursion] UICollectionView 0x7feb458e0000 Visible cells update scheduled with call stack:
(
0 UIKitCore 0x00007fff24644a06 -[UICollectionView _setNeedsVisibleCellsUpdate:withLayoutAttributes:] + 107
1 UIKitCore 0x00007fff24675708 -[UICollectionView _invalidateLayoutWithContext:] + 1310
2 UIKitCore 0x00007fff246a660c -[UICollectionViewLayout invalidateLayoutWithContext:] + 200
3 UIKitCore 0x00007fff2469a329 -[UICollectionViewFlowLayout invalidateLayoutWithContext:] + 667
4 UIKitCore 0x00007fff246a3b5f -[UICollectionViewFlowLayout _didPerformUpdateVisibleCellsPassWithLayoutOffset:] + 430
5 UIKitCore 0x00007fff24653a33 -[UICollectionView _updateVisibleCellsNow:] + 10438
6 …Run Code Online (Sandbox Code Playgroud) uicollectionview ×10
ios ×7
swift ×4
uikit ×3
cocoa-touch ×1
ios15 ×1
uicollectionviewcompositionallayout ×1
uiscrollview ×1