在多个UIViews上添加Facebook Shimmer
我想在UICollectionViewCell上添加Facebook Shimmer,它有多个UIViews。
对于一个UIView ,它可以正常使用以下代码:
let shimmeringView = FBShimmeringView(frame: imageView.frame) shimmeringView.contentView = imageView backgroundView.addSubview(shimmeringView) shimmeringView.isShimmering = true
其中backgroundView
是我拥有所有子视图的视图,例如labelView
, labelView
等。
当我尝试添加多个视图时,第一个视图正在获得正确的帧,但其他视图的宽度变为零。 我在collectionView(_:cellForItemAt:)
添加此代码。
let shimmeringView = FBShimmeringView(frame: imageView.frame) shimmeringView.contentView = imageView backgroundView.addSubview(shimmeringView) shimmeringView.isShimmering = true let shimmeringView = FBShimmeringView(frame: labelView.frame) shimmeringView.contentView = labelView backgroundView.addSubview(shimmeringView) shimmeringView.isShimmering = true
任何人都可以告诉我,如果这是为多个UIView
实施Facebook Shimmer的正确方法,或者我做错了哪里?
我相信有很多方法可以实现FBShimmeringView
,这是一个偏好问题。 所以在我的情况下,我更喜欢最简单的方法(据我所知)。
我在tableViewCell
中做的当然有多个视图,例如imageView
和labels
,就像你的一样,我有多个UIView
灰色,放在我单元格中每个视图的顶部。
然后我只有一个FBShimmeringView
实例添加到我的单元格中。
这里有一些关于我使用FBShimmeringView
练习的更多细节。
*请注意,我使用SnapKit
以编程方式布局我的视图。
-
我的单元格中有一个名为
isLoading
的属性,它决定了是应该显示灰色视图还是现在显示。 如果显示,当然打开闪烁:public var serviceIsLoading: Bool = false { didSet { _ = self.view_Placeholders.map { $0.isHidden = !self.serviceIsLoading } self.view_Shimmering.isHidden = !self.serviceIsLoading self.view_Shimmering.isShimmering = self.serviceIsLoading } }
-
然后,在将所有子视图添加到单元格后,我向我的单元格添加一个白色视图:
// Place the FBShimmeringView // Try to add a dummy view let dummyView = UIView() dummyView.backgroundColor = .white self.addSubview(dummyView) dummyView.snp.makeConstraints { (make) in make.edges.equalToSuperview() }
-
将ShimerringView添加到单元格中:
self.addSubview(self.view_Shimmering) self.view_Shimmering.snp.makeConstraints { (make) in make.height.width.equalToSuperview() make.center.equalToSuperview() }
-
最后,将dummyView作为单元格的contentView:
self.view_Shimmering.contentView = dummyView
我的屏幕看起来像这样。 还记得在tableView
禁用交互。
当它闪烁时,这对我来说看起来很酷,只有一个简洁的观点。
希望能帮助到你!