6

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

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

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

p.s2:我发现了这个,它与 UIViews 完美配合,但不知道如何使它与 CollectionCells 和 TableCells 一起工作。:(

4

2 回答 2

1

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

  • 添加@IBDesignable到自定义子类UIView
  • 覆盖layoutSubviews(),并在那里定义外观
  • 或者,如果您只想为 IB 定义虚拟数据,请覆盖prepareForInterfaceBuilder()
  • UICollectionViewCell在 Interface Builder 中将该自定义视图添加到您的原型
  • 您应该看到 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
    }
}
于 2018-11-21T14:59:47.440 回答
-2

经过大量测试和使用图书馆后,我想出了这个:

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

于 2016-02-24T13:33:00.333 回答