ios - GradientLayer 在 iOS Swift App 中移动到左上角
问题描述
我使用以下代码为我的视图添加了一个 GradientLayer 作为背景:
import UIKit
@IBDesignable class MainView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
sharedInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
sharedInit()
}
override func prepareForInterfaceBuilder() {
sharedInit()
}
func sharedInit() {
let colorTop = UIColor.darkGray.cgColor
let colorBottom = UIColor.lightGray.cgColor
let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.frame
gradientLayer.colors = [colorTop, colorBottom]
self.layer.insertSublayer(gradientLayer, at: 0)
}
}
在 Xcode Storyboard 预览中,一切看起来都如您所愿,但在模拟器中,背景移动到左上角,如下面的屏幕截图所示。
如果有人能告诉我这里发生了什么,那就太好了。
谢谢。
解决方案
您应该转到“MainView”类中的“layoutSubviews”方法:-
override func layoutSubviews() {
super.layoutSubviews()
sharedInit()
}
另外,用以下代码替换“sharedInit”方法的“gradientLayer.frame = self.frame”行:-
gradientLayer.frame = self.bounds
正如我所检查的,这对我有用!
推荐阅读
- javascript - 你能在原生模块中打破严格模式吗?
- android - 需要添加import androidx.core.view.children
- javascript - 错误 - AngularJS Uncaught TypeError:angular.service 不是 taskService.js:2 的函数
- java - 自动完成编辑文本
- stata - Stata:计算y中任何x的总和?
- xamarin - 如何将第三方 .NET dll 添加到 Xamarin Forms
- mysql - sql - 如何按联接表分组
- docker - 如何从 ubuntu 容器中访问 php 和 composer 服务
- node.js - MongoDB - 按具有相同值的字段数量对集合进行排序
- spring - JSR-380 - 嵌套对象和 FieldError ObjectName 的 Bean 验证