- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我关注了这个 Custom Collection View Layout tutorial从 raywenderlich.com 使用 xcode 8 和 swift 3。
当我在实现教程中要求的所有方法后运行应用程序时,出现以下错误:
'no UICollectionViewLayoutAttributes instance for -layoutAttributesForItemAtIndexPath: {length = 2, path = 0 - 11}'
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
return self.cache[indexPath.row]
}
import UIKit
/* The heights are declared as constants outside of the class so they can be easily referenced elsewhere */
struct UltravisualLayoutConstants {
struct Cell {
/* The height of the non-featured cell */
static let standardHeight: CGFloat = 100
/* The height of the first visible cell */
static let featuredHeight: CGFloat = 280
}
}
class UltravisualLayout: UICollectionViewLayout {
// MARK: Properties and Variables
/* The amount the user needs to scroll before the featured cell changes */
let dragOffset: CGFloat = 180.0
var cache = [UICollectionViewLayoutAttributes]()
/* Returns the item index of the currently featured cell */
var featuredItemIndex: Int {
get {
/* Use max to make sure the featureItemIndex is never < 0 */
return max(0, Int(collectionView!.contentOffset.y / dragOffset))
}
}
/* Returns a value between 0 and 1 that represents how close the next cell is to becoming the featured cell */
var nextItemPercentageOffset: CGFloat {
get {
return (collectionView!.contentOffset.y / dragOffset) - CGFloat(featuredItemIndex)
}
}
/* Returns the width of the collection view */
var width: CGFloat {
get {
return collectionView!.bounds.width
}
}
/* Returns the height of the collection view */
var height: CGFloat {
get {
return collectionView!.bounds.height
}
}
/* Returns the number of items in the collection view */
var numberOfItems: Int {
get {
return collectionView!.numberOfItems(inSection: 0)
}
}
// MARK: UICollectionViewLayout
/* Return the size of all the content in the collection view */
override var collectionViewContentSize : CGSize {
let contentHeight = (CGFloat(numberOfItems) * dragOffset) + (height - dragOffset)
return CGSize(width: width, height: contentHeight)
}
override func prepare() {
let standardHeight = UltravisualLayoutConstants.Cell.standardHeight
let featuredHeight = UltravisualLayoutConstants.Cell.featuredHeight
var frame = CGRect.zero
var y:CGFloat = 0
for item in 0 ... (numberOfItems - 1) {
let indexPath = NSIndexPath(item: item, section: 0)
let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath as IndexPath)
attributes.zIndex = item
var height = standardHeight
if indexPath.item == featuredItemIndex {
let yOffset = standardHeight * nextItemPercentageOffset
y = self.collectionView!.contentOffset.y - yOffset
height = featuredHeight
} else if item == (featuredItemIndex + 1) && item != numberOfItems {
let maxY = y + standardHeight
height = standardHeight + max((featuredHeight - standardHeight) * nextItemPercentageOffset, 0)
y = maxY - height
}
frame = CGRect(x: 0, y: y, width: width, height: height)
attributes.frame = frame
cache.append(attributes)
y = frame.maxY
}
}
/* Return all attributes in the cache whose frame intersects with the rect passed to the method */
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
var layoutAttributes = [UICollectionViewLayoutAttributes]()
for attributes in cache {
if attributes.frame.intersects(rect) {
layoutAttributes.append(attributes)
}
}
return layoutAttributes
}
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
return self.cache[indexPath.row]
}
/* Return true so that the layout is continuously invalidated as the user scrolls */
override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
return true
}
}
最佳答案
刚刚在拥有 UICollection View 的 View Controller 的 super.viewDidLoad 中添加了它,它现在按预期工作。
这是一个快速修复,我相信有更合适的方法来解决这个问题,更好地管理来自 IOS10 的预取功能。
if #available(iOS 10.0, *) {
collectionView!.prefetchingEnabled = false
}
关于swift3 - UICollectionViewLayout 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40104210/
我关注了这个 Custom Collection View Layout tutorial从 raywenderlich.com 使用 xcode 8 和 swift 3。 当我在实现教程中要求的所有
假设您有一个带有普通自定义 UICollectionViewLayout 的 UICollectionView。 就是这样 >>> 不是 UICollectionViewLayoutAttribut
谁能指出我如何使用 UICollectionViewLayout 创建类似于 Pinterest 列布局的界面的正确方向? 我尝试在网上搜索,但似乎还没有很多例子。 最佳答案 1000memories
我正在尝试配置 Collection View 以在附图中显示以下自定义布局: 。本质上,我希望能够配置我的 Collection View ,使其看起来基于行而不是列。例如: 第 1 行:3 个大小
在UICollectionView中做这样的UICollectionViewLayout是真的吗?请给我一些想法,我该怎么做? 最佳答案 您可以使用 iCarousel ,用于此目的的第三方自定义控件
当我在没有自定义布局对象的情况下实现 UICollectionView 时,所有 16 个可重用单元格都会出现。也就是说,我有 1 个部分,该部分中有 16 个项目。当我创建自定义布局对象时,仅显示
我目前正在使用完全用 Swift 编码的 TreeMap 框架布局:https://github.com/yahoo/YMTreeMap 我创建了自己的 Layout 类,以便像这样自定义单元格: i
正如标题所说,我需要一个 uicollectionview,它能够如图所示在两个方向上分页。 每个方 block 都是ios屏幕,箭头表示允许分页的地方。 UICollectionViewFlowLa
我有两个单元格尺寸小(间距和插入前大约一半屏幕宽度)和大(插入前全屏宽度),这两种尺寸可以在下图中看到。 我希望 UICollectionView 根据给定的大小属性自动调整这些单元格的大小。我已经设
我正在尝试以编程方式设置 UICollectionViewLayout。我正在使用 UICollectionView,也没有使用 Storyboard,也没有设置其约束。 我关注了Ray Wender
我正在使用 UICollectionView 并尝试使用 UICollectionViewLayout 方法来调整单元格的大小,但它们从未被调用过。这些方法是: sizeForItemAtIndexP
我需要准备一个像 IOS spring board 这样的布局,即水平滚动的网格,启用分页,最重要的是单元格应该按行而不是按列排列(在第二张图片中)。我尝试使用 UICollectionViewFlo
我想从数据源中获取所有数据——包括可见的和不可见的单元格——以便计算可见单元格的属性。 collectionView:cellForItemAtIndexPath: 不起作用,因为它为不可见的单元格返
我正在尝试转换以下内容,但不断出现以下错误。 我正在尝试实现以下的 objective c 版本,效果很好: LSSwipeToDeleteCollectionViewLayout 是 UIColle
我已经实现了我自己的从 UICollectionViewLayout 子类化的集合 View 布局。在 prepare我计算和缓存布局属性。 在 layoutAttributesForElements
请帮我解决这个问题,我正在关注这个tutorial要制作自定义 UICollectionViewLayout,用户可以水平滑动以浏览各个部分,垂直滑动以显示项目。 我的问题是,我只希望用户在 UICo
我正在制作一个自定义 UICollectionViewLayout 类进行练习,本质上是尝试重现单元格无限水平布局的水平流布局。 一切都与我的 prepare() 和 layoutAttributes
我对 UICollectionViewLayout 进行了子类化以创建日历。我想让用户能够更改一些设置,例如屏幕上显示的天数(默认为 7)。 我将daysToShow保存在UserDefaults中。
我想使用具有自定义布局的 UICollectionView,其中集合的部分水平滚动,部分中的项目垂直滚动。 目前,我正在使用 UICollectionView,然后使用具有自己的 Collection
我正在将我的应用程序从 Obj-C 转换为 Swift。 我有 UICollectionViewLayout 的子类,它覆盖了已重命名为“prepare”的“prepareForLayout”。到目前
我是一名优秀的程序员,十分优秀!