ios - CAGradientLayer 未应用于整个屏幕
问题描述
我正在尝试将渐变图层应用于屏幕,但令人讨厌的是该图层仅占屏幕的一半。
我认为问题似乎来自这里的这个问题:
descriptionTextView.topAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
这是我第一次使用编程约束,所以我很难看出问题出在哪里。
这是下面的代码
class OBP1VC: UIViewController {
let gradientLayer: CAGradientLayer = {
let caGradient = CAGradientLayer()
caGradient.frame = UIScreen.main.bounds
caGradient.colors = [Colours.brightGreen.cgColor, Colours.midBlue.cgColor]
caGradient.startPoint = CGPoint(x: 0.0, y: 0.0)
caGradient.endPoint = CGPoint(x: 1.0, y: 1.0)
return caGradient
}()
let bearImageView: UIImageView = {
let imageView = UIImageView(image: #imageLiteral(resourceName: "br_flag"))
imageView.translatesAutoresizingMaskIntoConstraints = false
return imageView
}()
let descriptionTextView: UITextView = {
let textView = UITextView()
textView.text = "Hello\n\nWelcome to the new\n\nHome Healthcare"
textView.translatesAutoresizingMaskIntoConstraints = false
textView.textAlignment = .center
textView.isUserInteractionEnabled = false
textView.font = UIFont(name: Fonts.avenirBlack, size: 20.0)
return textView
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.addSubview(bearImageView)
view.addSubview(descriptionTextView)
setupLayout()
}
override func viewDidLayoutSubviews() {
view.layer.insertSublayer(gradientLayer, at: 0)
}
private func setupLayout() {
bearImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
bearImageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
bearImageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
bearImageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
descriptionTextView.topAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
descriptionTextView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
descriptionTextView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
descriptionTextView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}
}
解决方案
在上面的代码中textView的背景颜色覆盖了渐变布局,所以清除它会使渐变可见
您的 setupLayout 方法应如下所示 -
private func setupLayout() {
bearImageView.backgroundColor = UIColor.red
bearImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
bearImageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
bearImageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
bearImageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
descriptionTextView.topAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
descriptionTextView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
descriptionTextView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
descriptionTextView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
descriptionTextView.backgroundColor = UIColor.clear
}
推荐阅读
- c# - OneTimeSetUp:System.ComponentModel.Win32Exception:没有足够的内存资源来处理此命令
- raspberry-pi - 尝试在 Raspberry Pi 集群上设置多语言环境教堂
- c++ - 从类/结构中声明的枚举类型到在该类/结构中也声明的对等静态方法?
- python - 获取附加到Django中每个对象的前N个标签
- vue.js - 在 Nuxt js 项目 axios 自动编码 url
- java - 从具有列表字段的 Java 对象创建 QueryDSL 谓词的问题
- arrays - C:如何将输入作为未知大小的矩阵
- json - react useState setState 在首次加载时未定义,但在刷新后可以正常工作
- powerbi - Power BI 检查值是否在某个时间之前发生
- c++ - 如何删除从基类继承的纯虚函数?