【问题标题】:How to load Xib to CollectionView using width constraint in Swift?如何在 Swift 中使用宽度约束将 Xib 加载到 CollectionView?
【发布时间】:2020-11-18 09:39:00
【问题描述】:

我有这样的collectionView

我正在向这样的单元格调用不同的 3 个 xib 文件

collectionView.register(UINib(nibName: "OfficialVehicleHeader", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleHeaderCell")
collectionView.register(UINib(nibName: "OfficialVehicleMedium", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleMediumCell")
collectionView.register(UINib(nibName: "OfficialVehicleBottom", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleBottomCell")

我的collectionView布局代码

let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
collectionView.setCollectionViewLayout(layout, animated: true)
layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize

在 xib 文件中,我设置了约束(前导、尾随、底部、顶部为 0)以及高度约束。高度运行得很好没问题,但我不想设置宽度限制。因为屏幕不同

我哪里弄错了?

【问题讨论】:

    标签: ios swift xcode


    【解决方案1】:

    您必须设置前导和尾随它将根据设备宽度设置宽度。但不要忘记让您的集合视图约束可调整大小。

    这是我的示例代码:

    collectionView.translatesAutoresizingMaskIntoConstraints = false
        collectionView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        collectionView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        collectionView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
        collectionView.topAnchor.constraint(equalTo: view.topAnchor, constant: 140).isActive = true
        collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
    

    布局设置:

    layout.itemSize = CGSize(width: self.view.frame.width - 10, height: self.view.frame.height / 3)
    

    可调整大小的单元格约束:

    cell.widthAnchor.constraint(equalTo: widthAnchor, constant: 0).isActive = true
            cell.heightAnchor.constraint(equalTo: heightAnchor, constant: 0).isActive = true
            cell.leftAnchor.constraint(equalTo: leftAnchor, constant: 0).isActive = true
            cell.rightAnchor.constraint(equalTo: rightAnchor, constant: 0).isActive = true
    

    【讨论】:

      【解决方案2】:

      我解决了这个问题。我需要设置宽度约束,但我不想设置。我这样解决

      1. 转到xib文件并设置宽度限制

      2. 转到尺寸检查器并选择您创建的宽度约束

      3. 设置标识符,例如“myConstraint”

      4. 打开您的单元格文件并定义 IBOutlet

        for constraint in self.containerView.constraints {
          if constraint.identifier == "myConstraint" {
            constraint.constant = UIScreen.main.bounds.size.width * 0.70
          }
        }
        containerView.layoutIfNeeded()
        

      我添加了我提到的图像

      【讨论】:

        猜你喜欢
        • 2017-09-17
        • 2021-10-12
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        相关资源
        最近更新 更多