警告:
The item width must be less than the width of the UICollectionView minus the section insets left and right values, minus the content insets left and right values.
代码:
extension SaleViewController {
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator){
checkEstimatedSize()
}
func checkEstimatedSize(){
if(DeviceType.IS_IPAD || UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight){
if let layout = myCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.estimatedItemSize = CGSize(width: 1, height: 1)
layout.invalidateLayout()
}
}else{
if let layout = myCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.estimatedItemSize …Run Code Online (Sandbox Code Playgroud) ios uicollectionview uicollectionviewlayout swift uicollectionviewflowlayout
// viewdidload register
[self.collectionView registerClass:[TestHeaderCollectionReusableView class]
forSupplementaryViewOfKind:UICollectionElementKindSectionHeader
withReuseIdentifier:NSStringFromClass(NEHeaderCollectionReusableView.class)];
// viewForSupplementaryElementOfKind called
TestHeaderCollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:NSStringFromClass(TestHeaderCollectionReusableView.class)
forIndexPath:indexPath];
Run Code Online (Sandbox Code Playgroud)
在 iOS15 上,插入一个项目后
- (void)insertItem {
[self.dataSourece.firstObject insertObject:@{
@"title" : @"ins1"
} atIndex:0];
NSIndexPath * path= [NSIndexPath indexPathForItem:0 inSection:0];
[self.collectionView insertItemsAtIndexPaths:@[path]];
}
Run Code Online (Sandbox Code Playgroud)
在我插入项目后,它总是会在第一次重新创建 TestHeaderCollectionReusableView 。但在 iOS14 上,它将从缓存中进行杜克。
不知道为什么。
我试图减少我的UICollectionViewCells之间的空间
我尝试了子类化UICollectionViewFlowLayout并重写此方法:
- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *answer = [[super layoutAttributesForElementsInRect:rect] mutableCopy];
for(int i = 1; i < [answer count]; ++i) {
UICollectionViewLayoutAttributes *currentLayoutAttributes = answer[i];
UICollectionViewLayoutAttributes *prevLayoutAttributes = answer[i - 1];
NSInteger maximumSpacing = 4;
NSInteger origin = CGRectGetMaxX(prevLayoutAttributes.frame);
if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width) {
CGRect frame = currentLayoutAttributes.frame;
frame.origin.x = origin + maximumSpacing;
currentLayoutAttributes.frame = frame;
}
}
return answer;
}
Run Code Online (Sandbox Code Playgroud)
然后在我的UICollectionViewController viewDidLoad中:
SublassedcollectionViewLayout *space = [[SublassedcollectionViewLayout alloc]init];
self.collectionView.collectionViewLayout = space;
Run Code Online (Sandbox Code Playgroud)
这只会让我的UICollectionViewCells更小. …
我正在实现一个UICollectionView,它只显示一行单元格.它就像一个图像封面流程.这意味着我已经将UICollectionViewFlowLayout子类化了.当我用手指滚动时,我的实现工作正常,这意味着调用了以下委托方法,我将单元格置于中心位置;
-(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
Run Code Online (Sandbox Code Playgroud)
但是,当视图加载时,我希望视图自动滚动到单元格.对于这个自动滚动我使用以下内容;
[self.CollectionView scrollToItemAtIndexPath:_selectedIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
Run Code Online (Sandbox Code Playgroud)
问题是没有调用targetContentOffsetForProposedContentOffset,因此当自动滚动完成时,单元格偏离中心.
那么我怎么能以编程方式滚动我的集合视图,以便它也将中心滚动到的单元格?
我正在尝试UICollectionView根据这个主题构建一个标签流布局:http : //codentrick.com/create-a-tag-flow-layout-with-uicollectionview/
它一直工作到按钮动作,但有一个问题。正如您在下图中所看到的, customUICollectionViewCell不像主题那样正确对齐。我做的一切都一样,但是FlowLayout.swift
我想在这些单元格之间留出相等的间隙。但他们是这样对齐的。
你可以在FlowLayout.swift下面找到。
有人能告诉我我该如何解决吗?
import Foundation
import UIKit
class FlowLayout: UICollectionViewFlowLayout {
override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let attributesForElementsInRect = super.layoutAttributesForElementsInRect(rect)
var newAttributesForElementsInRect = [UICollectionViewLayoutAttributes]()
var leftMargin : CGFloat = 0.0
for attributes in attributesForElementsInRect! {
let refAttributes = attributes
// assign value if next row
if (refAttributes.frame.origin.x == self.sectionInset.left) {
leftMargin = self.sectionInset.left
} else {
// set x position of attributes to current margin …Run Code Online (Sandbox Code Playgroud) ios uicollectionview uicollectionviewcell uicollectionviewlayout swift
这是来自UICollectionViewCell动态调整4.4和5.5英寸的后续问题
虽然这个解决方案很棒,但我想根据设备的宽度,宽高比和我必须显示的总项目数量在UIVIewController中生成动态数量的项目单元格(kCellsPerRow).我只是无法弄清楚如何计算正确数量的kCellsPerRow,以便一旦达到宽高比限制它们就不会过于调整大小.
这是我到目前为止所拥有的:
var kCellsPerRow = ceil(global.TotalAmount) //Total Amount of Cells
var windowWidth = layout.collectionView!.frame.width // Device's Window Width
var dynamicWidth = windowWidth / CGFloat(kCellsPerRow) // Current Width of Each Cell
var dynamicHeight = windowWidth / CGFloat(kCellsPerRow) // Current Height of Each Cell
var limit = (Double(dynamicWidth) / Double(windowWidth))*(9/2) < (2/9) // Constraint/Threshold
if ( limit ) {
var newkCellsPerRow = CGFloat(kCellsPerRow * (2/9)) // Attempt
newkCellsPerRow = 9 // Fixed Size of 9 but what if we …Run Code Online (Sandbox Code Playgroud) dynamic uicollectionview uicollectionviewcell uicollectionviewlayout swift
这是参考链接:
https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest
我已UICollectionView在最后一个单元中实现了更多加载,数据正在下载,下载完成后我想重新加载集合
collectionView.collectionViewLayout.invalidateLayout()
self.collectionView.reloadData()
let concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(concurrentQueue) {
DataManager.sharedInstance.homeRequest(Dictionary: params, onSuccess: { (dict) in
self.downloadPageIndex += 1
let response = HomeObject(dictionary: dict)
for (_,e) in (response.dataDict?.enumerate())!{
self.dataArray.append(e)
}
dispatch_async(dispatch_get_main_queue()) {
self.collectionView.reloadData()
self.collectionView.collectionViewLayout.invalidateLayout()
}
self.activityIndicatorCell.stopAnimating()
}, onError: { (error) in
self.activityIndicatorCell.stopAnimating()
})
Run Code Online (Sandbox Code Playgroud)
像这个collectionview reloadata
谁能帮我吗?
我正在将我的项目从swift 2转换为swift 3,我很难理解以下函数的错误:
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
var attributes = [UICollectionViewLayoutAttributes]()
if self.itemAttributes != nil {
for section in self.itemAttributes {
let filteredArray = (section as AnyObject).filtered(
using: NSPredicate { (evaluatedObject, bindings) -> Bool in
return rect.intersects(evaluatedObject.frame)
}
) as! [UICollectionViewLayoutAttributes]
attributes.append(contentsOf: filteredArray)
}
}
return attributes
}
Run Code Online (Sandbox Code Playgroud)
self.itemAttributes 是一个类属性,定义为:
var itemAttributes : NSMutableArray!
sectionAttributes 设置在另一个功能:
override func prepare() {
if self.collectionView?.numberOfSections == 0 {
return
}
if (self.itemAttributes != nil && self.itemAttributes.count > 0) { …Run Code Online (Sandbox Code Playgroud) 我能够使用下面的函数更改collectionView单元格大小但是如何使此功能适用于不同的屏幕大小.所以,例如我希望iPad上的高度和宽度不同,iPhone就有办法做到这一点
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = UIScreen.main.bounds.width
let height = UIScreen.main.bounds.height
return CGSize(width: (width/5.5), height: (height/4.5))
}
Run Code Online (Sandbox Code Playgroud) ios uicollectionview uicollectionviewcell uicollectionviewlayout swift
我希望在我的UICollectionView中重复使用3个小单元,然后是2个大单元,再重复3个小单元,
我知道它与这个功能有关,但我很困惑如何实现结果
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
}
Run Code Online (Sandbox Code Playgroud)
请看一下截图.
ios uicollectionview uicollectionviewcell uicollectionviewlayout swift
通过将minimumLineSpacing集合视图布局的属性设置为负数,我让我的单元格重叠。但是,当我滚动并重绘单元格时,它们现在以相反的方向重叠。我在下面放了图片。
当滚动集合视图并重绘单元格时,如何保持单元格重叠,如第一张图片所示?
import UIKit
class PopularView: UIView {
let cellID = "cellID"
// MARK: - Views
let collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.minimumLineSpacing = -55 // -------Allows Overlap-----
layout.itemSize = CGSize(width: SCREEN_WIDTH, height: 185)
layout.minimumInteritemSpacing = 17
let view = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout)
view.backgroundColor = .white
return view
}()
// MARK: - Initializers
override init(frame: CGRect) {
super.init(frame: frame)
collectionView.dataSource = self
collectionView.register(PopularCell.self, forCellWithReuseIdentifier: cellID)
backgroundColor = .white
setupCollectionView()
}
required …Run Code Online (Sandbox Code Playgroud) ios uicollectionview uicollectionviewcell uicollectionviewlayout swift
请检查此附加代码并缩短屏幕。当我设置容器视图的颜色时它工作正常,但是当我在单元格中添加 UIImage 时它不起作用。我更改了 imageview 内容模式,但它不起作用。
class ViewController: UIViewController {
@IBOutlet weak var segColumn: UISegmentedControl!
@IBOutlet weak var collectionView: UICollectionView!
fileprivate var items: [UIImage] = [ // My images ]
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
}
}
extension ViewController: UICollectionViewDataSource{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
cell.imgCell.image = items[indexPath.row]
cell.imgCell.contentMode = .scaleAspectFill
cell.contentView.backgroundColor = …Run Code Online (Sandbox Code Playgroud) uiimageview uiimage uicollectionview uicollectionviewlayout swift
我从以下位置下载了 CollectionView 的 Pintrest 自定义布局: https://www.raywenderlich.com/4829472-uicollectionview-custom-layout-tutorial-pinterest
所以布局工作得很好,我把它设置好了,所以当你滚动到底部时,我需要让它实现像分页功能。
问题:如果用户从数组中添加或删除数据,则单元格不会反映其布局。例如:如果我第一次在数组中有 35 个对象,并且删除了 5 个记录,则可滚动应固定为 32 个对象,而它显示到 35 个对象,但在删除的情况下记录显示正确。但是,如果我们在运行时添加接下来的 35 个对象,那么我的数组将有 70 条记录,但集合视图不会重新加载数据,它仍然显示 35 条记录。
删除的情况下如何去掉这个空格?以及如何重新加载它并在添加时显示更多单元格?
请帮忙。
uicollectionview ×10
swift ×9
ios ×8
dynamic ×1
ios15 ×1
objective-c ×1
pinterest ×1
spacing ×1
swift3 ×1
uiimage ×1
uiimageview ×1