【问题标题】:Is it possible to use IBDesignable with UICollectionViewCells and live render them in storyboard?是否可以将 IBDesignable 与 UICollectionViewCells 一起使用并在情节提要中实时渲染它们?
【发布时间】:2016-04-14 01:16:57
【问题描述】:

我知道如何将@IBDesignable 与自定义视图一起使用。 但是是否可以将 IBDesignable 用于单元格并在情节提要中呈现它们?

例如:我在情节提要中有一个 collectionViewController,并添加了一个 uiCollectionCell 并指定类作为我的 customCellClass。

p.s:我知道在 collecionViews 和 tableViews 中使用 Xibs 我们必须在代码中调用方法 registerNib:forReuseIdentifer(我正在这样做)。只是想知道,是否有可能在情节提要中看到它的渲染视图。

p.s2:我找到了this,它与 UIViews 完美配合,但不知道如何使其与 CollectionCells 和 TableCells 一起使用。 :(

【问题讨论】:

  • 是的,我认为您不应该在 nib 文件中添加 TableViewCell 或 CollectionViewCell。你只需要添加一个简单的视图。它被添加到 contentView 中。
  • 我在我的自定义 UIView 中通过代码添加了集合视图,然后它也不会在情节提要中呈现。有什么想法吗?
  • 我认为要在故事板中呈现 collectionView,您必须在“prepareDorInterfaceBuilder”方法中做一些事情。 @Soumen
  • 我尝试了很多方法,我认为由于 Collection 或 Table 具有动态单元格类型,因此无法使用其单元格呈现集合视图。我发现集合视图正在呈现,除非数据源与视图连接。

标签: ios xib uicollectionviewcell ibdesignable


【解决方案1】:

是的。这是我在 Xcode 10.1 和 iOS 12 中发现的内容。将 @IBDesignable 添加到 UICollectionViewCell 的自定义子类确实间歇性地工作,但这更可靠:

  • @IBDesignable 添加到UIView 的自定义子类
  • 覆盖layoutSubviews(),并在那里定义外观
  • (可选)如果您只想为 IB 定义虚拟数据,请覆盖 prepareForInterfaceBuilder()
  • 在 Interface Builder 中将该自定义视图添加到您的原型 UICollectionViewCell
  • 您应该会看到 Interface Builder “构建”视图并在您的客户视图中绘制您的更改(我也认为这不可靠。如果没有任何反应并且选中了 Menu / Editor / Automatically Refresh Views,请在 Interface Builder 中进行一些其他更改)

示例类

@IBDesignable
class Avatar: UIView {

    // Despite not being used for views designed in Interface Builder, must still be defined for custom UIView subclasses with @IBDesignable, or IB will report errors
    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    // Used when a view is designed inside a view controller scene in Interface Builder and assigned to this custom UIView subclass
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        self.layer.cornerRadius = self.bounds.width / 2
        self.backgroundColor = UIColor.gray
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()

        self.backgroundColor = UIColor.blue
    }
}

【讨论】:

    【解决方案2】:

    经过大量测试和使用该库后,我想出了这个:

    您不应在 .nib 文件中添加 TableViewCellCollectionViewCells,而必须添加简单视图。我不确定它是否会出现在情节提要中(尚未检查过),但它会使错误消失。现在您甚至可以使用autoLayout 来调整单元格大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 2010-11-23
      相关资源
      最近更新 更多