gpt4 book ai didi

ios - 如何不陷入 viewWillLayoutSubviews 的无限循环?

转载 作者:可可西里 更新时间:2023-11-01 00:40:27 30 4
gpt4 key购买 nike

我有一个带有单元格和标题的 tableView。 header 由堆栈 View 中的两个 View 组成。每次 tableView 宽度变化时,我都会设置标题的特定高度。

问题:如何不陷入死循环?这是代码:

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

guard let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout else {
return
}

UIView.animate(withDuration: 0.5, animations: { [weak self] (_) in
self?.tableView.beginUpdates()
if (self?.filtersView.isHidden)! {
self?.filtersViewHeight.constant = .leastNormalMagnitude
self?.stackView.bounds.size.height = 45
} else {
self?.filtersViewHeight.constant = 100
self?.stackView.bounds.size.height = 45 + (self?.filtersViewHeight.constant)!
}
}, completion: { [weak self] (_) in
flowLayout.invalidateLayout()

self?.tableView.endUpdates() <---- this is wrong, as it forces the infinite loop.
})
}

最佳答案

您应该将此功能从 viewWIllLayoutSubviews 中取出并放入它自己的函数中。为您的动画调用该函数,并在您的动画 block 中调用 setNeedsLayoutviewWillLayoutSubviews 可以出于多种原因被调用。

tableView beginUpdatesendUpdates 通知 View tableView 或其中的一部分需要重绘,因此它将调用 viewWillLayoutSubviews .

关于ios - 如何不陷入 viewWillLayoutSubviews 的无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44414178/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com