ios – UICollectionViewCell出口nil在类中但在使用dequeueReusableCellWithReuseIdentifier后工作

ios – UICollectionViewCell出口nil在类中但在使用dequeueReusableCellWithReuseIdentifier后工作,第1张

概述UICollectionViewCell类中的nil个出口有几个帖子,如 this和 this,但没有一个解决方案有效.使用强插座而不是弱插座失败,registerClass解决方案不适用,因为单元不使用自定义XIB,数据源和委托正确连接等. 在这种情况下,插座是UIImageView,在UICollectionViewCell类中访问时为nil,但在外部访问时工作正常. UICollection UICollectionVIEwCell类中的nil个出口有几个帖子,如 this和 this,但没有一个解决方案有效.使用强插座而不是弱插座失败,registerClass解决方案不适用,因为单元不使用自定义XIB,数据源和委托正确连接等.

在这种情况下,插座是UIImageVIEw,在UICollectionVIEwCell类中访问时为nil,但在外部访问时工作正常.

UICollectionVIEw代码:

func collectionVIEw(collectionVIEw: UICollectionVIEw,cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionVIEwCell {    let cell = collectionVIEw.dequeueReusableCellWithReuseIDentifIEr(AlbumCellIDentifIEr,forIndexPath: indexPath) as! AlbumCell    cell.imageVIEw.image = getthumbnail()    cell.imageVIEw.contentMode = .ScaleAspectFill            cell.imageVIEw.layer.masksToBounds = true    cell.imageVIEw.layer.cornerRadius = cell.frame.size.wIDth / 2    return cell}

UICollectionVIEwCell代码:

class AlbumCell: UICollectionVIEwCell {    @IBOutlet weak var imageVIEw: UIImageVIEw!    overrIDe init(frame: CGRect) {        super.init(frame: frame)        doInit(frame)    }    required init?(coder aDecoder: NSCoder) {        super.init(coder: aDecoder)        doInit(frame)    }    private func doInit(frame: CGRect) {        // Round corners        imageVIEw.layer.masksToBounds = true        imageVIEw.layer.cornerRadius = frame.size.wIDth / 2    }}

UICollectionVIEwCell类内的圆角失败,因为imageVIEw为零,但UICollectionVIEw类内的圆角成功,因此imageVIEw似乎已连接.

为什么imageVIEw nil在UICollectionVIEwCell类中?

解决方法 你可能想尝试在awakeFromNib中调用doInit但是我认为框架可能尚未初始化(虽然没有测试):

overrIDe func awakeFromNib() {  super.awakeFromNib()  doInit(frame)}

由于您希望相对于视图的帧更新cornerRadius,我会在layoutSubvIEws中执行此 *** 作,因此任何帧更改都将直接反映到角半径值:

overrIDe func awakeFromNib() {  super.awakeFromNib()  imageVIEw.layer.masksToBounds = true}overrIDe func layoutSubvIEws() {  super.layoutSubvIEws()  imageVIEw.layer.cornerRadius = frame.size.wIDth / 2}

更新:既然你说过,你不使用nib文件加载视图,只需将imageVIEw.layer.masksToBounds = true移动到init(frame:CGRect)并删除awakeFromNib.

总结

以上是内存溢出为你收集整理的ios – UICollectionViewCell出口nil在类中但在使用dequeueReusableCellWithReuseIdentifier后工作全部内容,希望文章能够帮你解决ios – UICollectionViewCell出口nil在类中但在使用dequeueReusableCellWithReuseIdentifier后工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存