Swift iOS UIKit:Logo图片阴影效果不显示问题求助
iOS UIImageView阴影不显示的解决方案
你的代码里logoView.clipsToBounds = true是导致阴影无法显示的核心原因:阴影是绘制在视图layer的外部区域,而clipsToBounds = true会强制裁剪所有超出视图边界的内容,包括阴影,自然就看不到效果了。
下面给两种针对性的解决办法:
方案一:不需要图片裁剪到圆角时
直接移除clipsToBounds = true(或者设置为false)即可,修改后的代码:
func setUpLogo(){ view.addSubview(logoView) logoView.translatesAutoresizingMaskIntoConstraints = false logoView.topAnchor.constraint(equalTo: view.topAnchor,constant: 220).isActive = true logoView.widthAnchor.constraint(equalToConstant: 140).isActive = true logoView.heightAnchor.constraint(equalToConstant: 190).isActive = true logoView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true logoView.image = UIImage(named: "logoCharity") logoView.layer.cornerRadius = 11 // 移除裁剪设置,阴影就能正常显示 // logoView.clipsToBounds = true logoView.layer.shadowColor = UIColor.red.cgColor logoView.layer.shadowOpacity = 1 logoView.layer.shadowOffset = CGSize(width: 0, height: 0) logoView.layer.shadowRadius = 10 }
方案二:需要同时保留图片圆角和阴影时
这种情况需要把UIImageView放到一个父视图里,将阴影添加到父视图上,让UIImageView只负责裁剪自身图片:
func setUpLogo(){ // 创建专门承载阴影的父容器 let shadowContainer = UIView() shadowContainer.translatesAutoresizingMaskIntoConstraints = false view.addSubview(shadowContainer) // 给父容器设置阴影 shadowContainer.layer.shadowColor = UIColor.red.cgColor shadowContainer.layer.shadowOpacity = 1 shadowContainer.layer.shadowOffset = CGSize(width: 0, height: 0) shadowContainer.layer.shadowRadius = 10 // 将logoView添加到容器中 shadowContainer.addSubview(logoView) logoView.translatesAutoresizingMaskIntoConstraints = false // 让logoView填满父容器 logoView.topAnchor.constraint(equalTo: shadowContainer.topAnchor).isActive = true logoView.bottomAnchor.constraint(equalTo: shadowContainer.bottomAnchor).isActive = true logoView.leadingAnchor.constraint(equalTo: shadowContainer.leadingAnchor).isActive = true logoView.trailingAnchor.constraint(equalTo: shadowContainer.trailingAnchor).isActive = true logoView.image = UIImage(named: "logoCharity") logoView.layer.cornerRadius = 11 logoView.clipsToBounds = true // 只裁剪自身图片,不影响父容器的阴影 // 给父容器设置布局约束 shadowContainer.topAnchor.constraint(equalTo: view.topAnchor,constant: 220).isActive = true shadowContainer.widthAnchor.constraint(equalToConstant: 140).isActive = true shadowContainer.heightAnchor.constraint(equalToConstant: 190).isActive = true shadowContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true }
内容的提问来源于stack exchange,提问作者Jackie Tom
相关产品推荐
相关产品推荐

