渐变层在 Xib 文件中的纵向模式下不起作用
Posted
技术标签:
【中文标题】渐变层在 Xib 文件中的纵向模式下不起作用【英文标题】:Gradient Layer Is Not Working on Portrait Mode in Xib File 【发布时间】:2020-01-18 06:17:34 【问题描述】:我想在Xib
文件中的UIView
上设置渐变层,但在纵向模式渐变层中,它不会填充所有UIView
。
渐变类:
extension UIView
@discardableResult
func applyGradient(colours: [UIColor]) -> CAGradientLayer
return self.applyGradient(colours: colours, locations: nil)
@discardableResult
func applyGradient(colours: [UIColor], locations: [NSNumber]?) -> CAGradientLayer
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = colours.map $0.cgColor
gradient.locations = locations
self.layer.insertSublayer(gradient, at: 0)
return gradient
Xib
文件类:
class TempView: UIView
override func awakeFromNib()
super.awakeFromNib()
override func layoutSubviews()
super.layoutSubviews();
self.viewMain.applyGradient(colours: [.black, .gray])
【问题讨论】:
您正在情节提要中使用此临时视图?什么是viewMain?描述你的代码。 tempView 是 Xib 文件的 Class,viewMain 是 Xib 文件中的 UIView 【参考方案1】:试试这个:
class TempView: UIView
override func awakeFromNib()
super.awakeFromNib()
override func layoutSubviews()
super.layoutSubviews();
self.viewMain.layoutIfNeeded()
self.viewMain.applyGradient(colours: [.black, .gray])
【讨论】:
【参考方案2】:我使用这个扩展来解决这个问题:
extension UIView
func addGradient(colors: [UIColor], locations: [NSNumber])
addSubview(ViewWithGradient(addTo: self, colors: colors, locations: locations))
class ViewWithGradient: UIView
private var gradient = CAGradientLayer()
init(addTo parentView: UIView, colors: [UIColor], locations: [NSNumber])
super.init(frame: CGRect(x: 0, y: 0, width: 1, height: 2))
restorationIdentifier = "__ViewWithGradient"
for subView in parentView.subviews
if let subView = subView as? ViewWithGradient
if subView.restorationIdentifier == restorationIdentifier
subView.removeFromSuperview()
break
let cgColors = colors.map (color) -> CGColor in
return color.cgColor
gradient.frame = parentView.frame
gradient.colors = cgColors
gradient.locations = locations
backgroundColor = .clear
parentView.addSubview(self)
parentView.layer.insertSublayer(gradient, at: 0)
parentView.backgroundColor = .clear
autoresizingMask = [.flexibleWidth, .flexibleHeight]
clipsToBounds = true
parentView.layer.masksToBounds = true
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
override func layoutSubviews()
super.layoutSubviews()
if let parentView = superview
gradient.frame = parentView.bounds
override func removeFromSuperview()
super.removeFromSuperview()
gradient.removeFromSuperlayer()
【讨论】:
以上是关于渐变层在 Xib 文件中的纵向模式下不起作用的主要内容,如果未能解决你的问题,请参考以下文章
PackageInstaller 在 MIUI 优化模式下不起作用
.Net 3.5 中的 Configuration.Save() 在部署/发布模式下不起作用
UITableViewCell 背景渐变在第一次渲染时不起作用
日期时间的显示格式在 MVC Core 和引导程序 4 中的编辑模式下不起作用