不再为iOS 16中的uicollectionViewCell/uitableViewCell调用Intinsiccontentsize()吗?

发布于 2025-02-07 00:58:29 字数 1326 浏览 0 评论 0原文

我已经在uicollectionViewCell中使用了InvaLationIntrinsicContentsize()来计算自定义UI。但是它并未在iOS Beta 16设备上调用intrinsiccontentsize

class DynamicCell: UICollectionViewCell {
    func invokeResize() {
        cell.subviews.forEach { $0.resize() }

        // it doesn't invoke intrinsicContentSize from iOS 16 beta ?? 
        invalidateIntrinsicContentSize() 
    }

    override func intrinsicContentSize: CGSize { 
        return calculateDynamicCellSize()
    }
}

我不知道它是实现uicollectionView.selffsizingInvalidation属性的错误还是指

规可以使用父级(uicollectionReusableView | uiview)方法为iOS beta 16修改此代码。

class RevisedDynamicCell: UICollectionViewCell {
    func invokeResize() {
        cell.subviews.forEach { $0.resize() }

        if #available(iOS 16.0, *) {
            // It works because it called UIView.invalidateIntrinsicContentSize 
            invalidateUIViewIntrinsicContentSize()
        } else {
            invalidateIntrinsicContentSize() 
        }
    }

    override func intrinsicContentSize: CGSize { 
        return calculateDynamicCellSize()
    }
}

extension UICollectionReusableView {
    func invalidateUIViewIntrinsicContentSize() {
        super.invalidateIntrinsicContentSize()
    }
}

I've used invalidateIntrinsicContentSize() in UICollectionViewCell to calculate custom UI. But it doesn't invoke intrinsicContentSize on iOS beta 16 devices..

class DynamicCell: UICollectionViewCell {
    func invokeResize() {
        cell.subviews.forEach { $0.resize() }

        // it doesn't invoke intrinsicContentSize from iOS 16 beta ?? 
        invalidateIntrinsicContentSize() 
    }

    override func intrinsicContentSize: CGSize { 
        return calculateDynamicCellSize()
    }
}

I don't know if it is a bug or a specification that occurred while implementing UICollectionView.selfSizingInvalidation property

I could revise this code for iOS beta 16 using parent's( UICollectionReusableView | UIView ) methods like below.

class RevisedDynamicCell: UICollectionViewCell {
    func invokeResize() {
        cell.subviews.forEach { $0.resize() }

        if #available(iOS 16.0, *) {
            // It works because it called UIView.invalidateIntrinsicContentSize 
            invalidateUIViewIntrinsicContentSize()
        } else {
            invalidateIntrinsicContentSize() 
        }
    }

    override func intrinsicContentSize: CGSize { 
        return calculateDynamicCellSize()
    }
}

extension UICollectionReusableView {
    func invalidateUIViewIntrinsicContentSize() {
        super.invalidateIntrinsicContentSize()
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文