UITableViewCell 中没有出现模糊效果

Posted

技术标签:

【中文标题】UITableViewCell 中没有出现模糊效果【英文标题】:Blur effect not appearing in UITableViewCell 【发布时间】:2017-03-03 05:02:01 【问题描述】:

我正在尝试为我的视图添加模糊效果。我像这样创建了模糊效果

let blurLabel: UIVisualEffectView = 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)


    return blurEffectView
    ()

然后我像这样将它添加到子视图中,并用它设置约束

 override init(style: UITableViewCellStyle, reuseIdentifier: String?) 
        super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
        let view = tableViewCell

        addSubview(view)
        view.addSubview(blurLabel)

 blurLabel.leftAnchor.constraint(equalTo: self.leftAnchor,constant:0).isActive = true
        //blurLabel.topAnchor.constraint(equalTo: self.topAnchor, constant: 178).isActive = true
        blurLabel.widthAnchor.constraint(equalToConstant: 375).isActive = true
        blurLabel.heightAnchor.constraint(equalToConstant: 180).isActive = true

但是当我运行应用程序时它根本没有出现

【问题讨论】:

【参考方案1】:

编辑:正如@HAS 和@Fogmeister 所建议的,您也可以使用translatesAutoResizingMaskIntoConstraints = false,因为在不指定显式框架的情况下使用自动布局是更好的解决方案。

您必须像这样将 frame 分配给 UIVisualEffectView

 let blurLabel: UIVisualEffectView = 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = CGRect(x: 0, y: 0, width: 60, height: 40) //give desirable frame
    return blurEffectView
 ()

【讨论】:

这应该没有必要。由于您已经使用自动布局,您应该能够设置模糊视图的translatesAutoResizingMaskIntoConstraints = false,以便自动布局不会尝试将其宽度和高度设为零(因为您没有使用框架对其进行初始化,所以它假定框架为0, 0, 0, 0)。正如 Arpit 所说,一种可能性是设置一个新框架,但我认为更简洁的解决方案是使用没有显式框架的自动布局。 是的,@HAS 在这里是正确的。你需要做的是设置translatesAutoResizingMaskIntoConstraints = false。哦,是的,他已经说过了:D【参考方案2】:

如果您愿意,您也可以将您的 blurView 提供给您的任何视图或子视图,而不是提供明确的框架。

let blurLabel: UIVisualEffectView = 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)    
    blurEffectView.frame = myMainview.bounds //Blur effect's frame
    return blurEffectView
()

override func viewDidLoad() 
    super.viewDidLoad()
    // Use it somewhere using
    self.view.insertSubview(blurEffectView, belowSubview: myAnotherView)
    // You may also use any of the subviews too, instead of the self.view
    /// self.myView.insertSubview(blurEffectView, belowSubview: myAnotherView)

【讨论】:

【参考方案3】:

要解决此问题,您只需停止它自动创建约束。像这样……

let blurLabel: UIVisualEffectView = 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    // this line will stop constraints being added for a zero frame
    blurEffectView.translatesAutoResizingMaskIntoConstraints = false
    return blurEffectView
()

【讨论】:

以上是关于UITableViewCell 中没有出现模糊效果的主要内容,如果未能解决你的问题,请参考以下文章

Swift UITableViewCell 阴影没有出现

如何在我的 UINavigationBar 后面获得模糊效果

在自定义 UITableViewCell 中设置 UIButton 的 contentMode 没有效果

UIImageView 没有出现在自定义 UITableViewCell 中

UICollectionView 以编程方式添加到 UITableViewCell 中,但没有出现?

自定义 UITableViewCell 未出现在表格中