标签: uicollectionviewdelegateflowlayout

转场后屏幕变黑

我试图调试这个,但无济于事。

基本上,当我从第一个视图控制器切换到第二个视图控制器时,屏幕会暂时变黑。代码按照我的意愿执行,但屏幕变黑对我来说有点痛苦。

这是代码:

从第一页开始:

func mapView(_ mapView: MGLMapView, tapOnCalloutFor annotation: MGLAnnotation) {
        self.performSegue(withIdentifier: "goToSecond", sender: self)
    }
Run Code Online (Sandbox Code Playgroud)

第二个视图控制器:

override func viewDidLoad() {
    super.viewDidLoad()
    self.loadDataFromFirebase()
}
Run Code Online (Sandbox Code Playgroud)

第一个功能:

  func loadDataFromFirebase() {
           let db = Firestore.firestore()
           db.collection(restaurauntName).getDocuments { (snapshot, err) in
              if let err = err {
                 print("Error getting documents: \(err)")
                 return
              } else {
                 for document in snapshot!.documents {
                    let name = document.get("Name") as! String
                    let description = document.get("Description") as! String
                    self.names.append(name)
                    self.descriptions.append(description)
                 }
                 self.setupImages() //safe to do this here as the …
Run Code Online (Sandbox Code Playgroud)

xcode uicollectionview swift uicollectionviewdelegateflowlayout

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

UICollectionView 单元格忽略 UICollectionViewDelegateFlowLayout - sizeForItemAt

我正在尝试布局我的 collectionViewCell 的大小,以便在每一行中有 7 个单元格(简单吧?)。

单元格很简单,只有一个UILabel,上左下右约束为0。

我已经设置了 sizeForItemAt 方法,如下所示,确保我的控制器是 collectionViewDelegateFlowLayout、collectionViewDelegate 和 collectionViewDataSource,以及 collectionview.delegate 和 .datasource = self。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let safeScreenWidth = self.view.frame.size.width - 30

        let width: CGFloat = (safeScreenWidth / 7)
        let height: CGFloat = 40.0

        return CGSize(width: width, height: height)
    }
Run Code Online (Sandbox Code Playgroud)

该方法被正确调用(使用断点和 print() 检查),但是单元格决定完全忽略给定的大小,并且输出的大小刚好足以包含其标签的文本(如果标签的文本为空,则应用程序崩溃“无效参数不满足:!CGSizeEqualToSize(size, CGSizeZero)")。

我尝试设置不同的尺寸,例如宽度 = 200,高度 = 200;但是没有任何改变,正如我所说,单元格总是很小,刚好适合其标签的文本。

一个快速的解决方法是在 cellForItemAt 中为标签设置高度和宽度约束,但我想了解为什么 sizeForItemAt 不起作用。

ios uicollectionview uicollectionviewcell swift uicollectionviewdelegateflowlayout

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

设置集合视图单元格的动态宽度时出现问题

我正在尝试动态设置集合视图单元格的宽度。最初它没有按预期渲染。但是当我点击单元格时,它会根据我的需要进行调整。这是我写的代码:

代码

import UIKit

class ViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource {

    @IBOutlet weak var collView: UICollectionView!


    var tasksArray = ["To Do", "SHOPPING","WORK"]
    var selectedIndex = Int()

    override func viewDidLoad() {
        super.viewDidLoad()
        let layout = collView?.collectionViewLayout as! UICollectionViewFlowLayout
        layout.itemSize = UICollectionViewFlowLayout.automaticSize
        layout.estimatedItemSize = CGSize(width: 93, height: 40)
        // Do any additional setup after loading the view, typically from a nib.
    }
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return tasksArray.count
    } …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview swift uicollectionviewdelegateflowlayout

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

如何在不使用部分的情况下在水平集合视图中制作 2 行

UICollectionView 中的水平滚动仅返回一行,我需要制作一个包含 2 行的水平滚动集合视图,如下图所示

[1]:https://i.stack.imgur.com/Vs1kt.png:[1]

horizontal-scrolling uikit uicollectionview swift uicollectionviewdelegateflowlayout

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

UICollectionView sizeForItemAt 被调用但大小不正确

我想让第一部分的单元格是集合视图的全宽,第二部分是宽度的一半。在启动时,尽管高度似乎受到尊重,但单元格不尊重给定的宽度。几秒钟后,集合视图会重新加载,并且大部分时间它会将单元格设置为正确的大小。当手机的方向更改为横向时,单元格再次以不正确的尺寸绘制。

我尝试使用 UICollectionViewDelegateFlowLayout 和 sizeForItemAt 委托函数来设置单元格大小,但即使调用该函数,它们也不遵循给定的大小。

目前,我正在设置部分插入,然后计算集合视图边界中单元格的剩余可用宽度,然后将宽度除以每行的单元格数。

class HomeCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

    let sectionInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)

    override func viewDidLoad() {
        super.viewDidLoad()

        self.collectionView?.contentInsetAdjustmentBehavior = .always
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        return CGSize(width: collectionView.frame.width, height: 44)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        return self.sectionInsets
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { …
Run Code Online (Sandbox Code Playgroud)

uicollectionview swift uicollectionviewdelegateflowlayout

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