在多个UIViews上添加Facebook Shimmer

我想在UICollectionViewCell上添加Facebook Shimmer,它有多个UIViews。

对于一个UIView ,它可以正常使用以下代码:

let shimmeringView = FBShimmeringView(frame: imageView.frame) shimmeringView.contentView = imageView backgroundView.addSubview(shimmeringView) shimmeringView.isShimmering = true 

其中backgroundView是我拥有所有子视图的视图,例如labelViewlabelView等。

当我尝试添加多个视图时,第一个视图正在获得正确的帧,但其他视图的宽度变为零。 我在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中做的当然有多个视图,例如imageViewlabels ,就像你的一样,我有多个UIView灰色,放在我单元格中每个视图的顶部。

然后我只有一个FBShimmeringView实例添加到我的单元格中。

这里有一些关于我使用FBShimmeringView练习的更多细节。

*请注意,我使用SnapKit以编程方式布局我的视图。

  1. 我的单元格中有一个名为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 } } 
  2. 然后,在将所有子视图添加到单元格后,我向我的单元格添加一个白色视图:

     // 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() } 
  3. 将ShimerringView添加到单元格中:

     self.addSubview(self.view_Shimmering) self.view_Shimmering.snp.makeConstraints { (make) in make.height.width.equalToSuperview() make.center.equalToSuperview() } 
  4. 最后,将dummyView作为单元格的contentView:

     self.view_Shimmering.contentView = dummyView 

我的屏幕看起来像这样。 还记得在tableView禁用交互。

当它闪烁时,这对我来说看起来很酷,只有一个简洁的观点。

在此处输入图像描述

希望能帮助到你!