[英]Swift UITableViewCell Shadow not appearing
我正在嘗試創建在我的其他 UIViewControllers 中正常工作的自定義表格視圖單元格。 但是,在我的一個控制器中,陰影沒有增長,我幾乎看不到陰影。
這是陰影顯示為紅色的圖像,您可以看到它幾乎不可見。
我的單元格在 contentView 中添加了一個 UIView 以創建浮動單元格效果 - 相同的代碼和相同的 storyboard 布局正在我的控制器中使用,但這是唯一發生陰影問題的表格視圖 - 所以我必須遺漏一些東西。
我的addShadow
擴展:
extension UIView {
func addShadow(offset: CGSize, color: UIColor, radius: CGFloat, opacity: Float) {
layer.masksToBounds = false
layer.shadowOffset = offset
layer.shadowColor = color.cgColor
layer.shadowRadius = radius
layer.shadowOpacity = opacity
}
}
我在自定義單元格上的awakeFromNib
:
:: cellContentView
是我的 UIView 添加到單元格的基本contentView
中。
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = .clear
self.selectionStyle = .none
cellContentView?.layer.masksToBounds = true
cellContentView?.round(corners: [.topLeft, .topRight, .bottomLeft, .bottomRight], radius: 10)
cellContentView?.addShadow(offset: CGSize(width: 40, height: 60), color: UIColor.red, radius: 10, opacity: 1)
cellContentView?.layer.shouldRasterize = true
}
注意: .round
是我所有單元格上使用的擴展名。
無論我為這個陰影添加什么半徑或偏移量,它都不會比圖像大。 此外,我的控制器中的其他單元都不需要設置shouldRasterize
屬性,但確實如此。
有誰知道這里發生了什么? 謝謝:)
奇怪的是,如果我在視圖周圍添加約束以保持視圖和單元格內容視圖之間的間隙較大,則背景顏色會消失 - 在 storyboard 中設置為白色。
您應該調用 layoutSubviews 方法。 因為在視圖上傳后應該添加陰影
override func awakeFromNib() {
super.awakeFromNib()
//init methods
}
override public func layoutSubviews() {
super.layoutSubviews()
//Added shadow
self.reloadLayers()
}
private func reloadLayers() {
self.layer.cornerRadius = 5
self.addShadow(.TransactionCell)
}
我希望它有幫助
內容視圖將填充您的單元格,因此您需要在內容視圖中添加陰影以查看其中包含所有組件的內容。 然后在該視圖和內容視圖之間添加約束。 其次,陰影的 40 和 60 屬性可能太大了,當我說太大時,我的意思是難以置信的大,因為單元格中內容視圖之間的差距不超過 15 - 30 甚至更小。 所以嘗試使用更少的值,雖然半徑可以保持 10,但你會看到最適合的值。 如果單元格內容視圖是您的自定義視圖,如果您的視圖不是透明的或其中的任何內容,那么值將完成這項工作,在這種情況下它不會,並且很難解決這個問題,我嘗試了許多庫和自定義代碼它永遠不會好。
squircleView.layer.cornerRadius = 40
squircleView.layer.cornerCurve = CALayerCornerCurve.continuous
squircleView.layer.shadowColor = UIColor.systemGray.cgColor
squircleView.layer.shadowOpacity = 0.7
squircleView.layer.shadowOffset = CGSize(width: 0, height: 0.5)
squircleView.layer.shadowRadius = 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.