标签: uicollectionviewlayout

UICollectionView 警告

警告: 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

1
推荐指数
1
解决办法
4838
查看次数

iOS15 UICollectionView自定义布局,插入项目后,viewForSupplementaryElementOfKind总是重新创建一个新标题

// 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 上,它将从缓存中进行杜克。

不知道为什么。

ios uicollectionview uicollectionviewlayout ios15

1
推荐指数
1
解决办法
1504
查看次数

减少UICollectionViewCells之间的空间

目的

我试图减少我的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更小. …

spacing ios uicollectionviewcell uicollectionviewlayout

0
推荐指数
1
解决办法
1916
查看次数

如何使用scrollToItemAtIndexPath将具有内容偏移量的单元格置于UICollectionView中

我正在实现一个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,因此当自动滚动完成时,单元格偏离中心.

那么我怎么能以编程方式滚动我的集合视图,以便它也将中心滚动到的单元格?

objective-c uicollectionview uicollectionviewlayout

0
推荐指数
1
解决办法
1941
查看次数

如何对齐 UICollectionViewCell?

我正在尝试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

0
推荐指数
1
解决办法
3933
查看次数

动态UICollectionViewCell宽度相对于帧宽和宽高比

这是来自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

0
推荐指数
1
解决办法
2071
查看次数

Swift中的UICollectionView自定义布局重新加载问题

这是参考链接:

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

谁能帮我吗?

uicollectionviewcell uicollectionviewlayout swift

0
推荐指数
1
解决办法
970
查看次数

swift 2中的layoutAttributesForElements函数给出了错误警告

我正在将我的项目从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)

uicollectionviewlayout swift3

0
推荐指数
1
解决办法
3454
查看次数

根据屏幕大小更改UICollectionView单元格大小

我能够使用下面的函数更改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

0
推荐指数
1
解决办法
808
查看次数

在UICollectionView中使用序列的小和大单元大小

我希望在我的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

0
推荐指数
1
解决办法
620
查看次数

重绘时保持集合视图单元格重叠

通过将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

0
推荐指数
1
解决办法
1971
查看次数

UICollectionViewLayout 不适用于 Swift 5 和 Xcode 11 中的 UIImage

请检查此附加代码并缩短屏幕。当我设置容器视图的颜色时它工作正常,但是当我在单元格中添加 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

0
推荐指数
1
解决办法
1305
查看次数

使用 Pinterest 单元格快速添加或删除单元格后,使用自定义布局调整 UICollectionView 的大小

我从以下位置下载了 CollectionView 的 Pintrest 自定义布局: https://www.raywenderlich.com/4829472-uicollectionview-custom-layout-tutorial-pinterest

所以布局工作得很好,我把它设置好了,所以当你滚动到底部时,我需要让它实现像分页功能。

问题:如果用户从数组中添加或删除数据,则单元格不会反映其布局。例如:如果我第一次在数组中有 35 个对象,并且删除了 5 个记录,则可滚动应固定为 32 个对象,而它显示到 35 个对象,但在删除的情况下记录显示正确。但是,如果我们在运行时添加接下来的 35 个对象,那么我的数组将有 70 条记录,但集合视图不会重新加载数据,它仍然显示 35 条记录。

删除的情况下如何去掉这个空格?以及如何重新加载它并在添加时显示更多单元格?

请帮忙。

ios pinterest uicollectionview uicollectionviewlayout swift

0
推荐指数
1
解决办法
718
查看次数