我正在尝试在具有多个 UIView 的 UICollectionViewCell 上添加 Facebook Shimmer。
For 一个 UIView,使用下面的代码可以正常工作:
let shimmeringView = FBShimmeringView(frame: imageView.frame)
shimmeringView.contentView = imageView
backgroundView.addSubview(shimmeringView)
shimmeringView.isShimmering = true
Where backgroundView
是我拥有所有子视图的视图,例如imageView
, 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
谁能告诉我这是否是为多个实施 Facebook Shimmer 的正确方法UIView
s或者我哪里做错了?
我相信有很多方法可以实现FBShimmeringView
,这是一个偏好问题。所以就我而言,我更喜欢最简单的方法(根据我的说法)。
我在我的tableViewCell
当然有多种观点,例如imageView
and 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设为cell的contentView:
self.view_Shimmering.contentView = dummyView
我的屏幕看起来像这样。另请记住禁用您的交互tableView
.
当它闪闪发光时,这对我来说看起来很酷,只是一个闪闪发光的视图。
希望能帮助到你!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)