【发布时间】:2022-01-05 05:06:41
【问题描述】:
我实现了一个代码以将对角渐变应用于不同的视图。它适用于所有小视图和小屏幕上的所有视图,但在 iPhone 13 Pro Max 模拟器上,它不适用于全视图,并在右侧留下一些部分。我只注意到即使在其他一些更宽的视图中,这个渐变也只适用于大约 80% 的宽度。 这是它在一个视图中显示的屏幕截图:
它不适用于视图的右侧,并且右角半径是不可见的。 这是渐变的代码:
func applyGradientDiagonal(isVertical: Bool, colorArray: [UIColor]) {
layer.sublayers?.filter({ $0 is CAGradientLayer }).forEach({ $0.removeFromSuperlayer() })
let gradientLayer = CAGradientLayer()
gradientLayer.colors = colorArray.map({ $0.cgColor })
if isVertical {
//top to bottom
gradientLayer.locations = [0.0, 1.0]
} else {
//left to right
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)
}
backgroundColor = .clear
gradientLayer.frame = bounds
layer.insertSublayer(gradientLayer, at: 0)
}
我在viewDidLoad() 中这样称呼它:
self.viewTAGradient.applyGradientDiagonal(isVertical: false, colorArray: [UIColor.init(named: "gradient1")!, UIColor.init(named: "gradient2")!, UIColor.init(named: "gradient3")!])
我寻找了一些解决方案,甚至尝试这样称呼它,但这也没有用:
override func viewDidLayoutSubviews() {
self.viewTAGradient.applyGradientDiagonal(isVertical: false, colorArray: [UIColor.init(named: "gradient1")!, UIColor.init(named: "gradient2")!, UIColor.init(named: "gradient3")!])
}
编辑:新更新: 问题在于 iPhone 13 pro max 上的所有渐变。我从互联网上复制了一些用于渐变的代码,并创建了新的视图控制器,只有一个固定高度的视图粘在顶部,并且在 13 pro max 上全部移到左侧。虽然在其他设备上工作正常。这是屏幕截图:
谁能帮助我为什么在一个特定的设备上它的行为是这样的?
【问题讨论】:
-
你对
viewTAGradient的约束设置是否正确? -
当您在 viewDidLayoutSubviews() 中调用 applyGradientDiagonal(isVertical:colorArray:) 时,它应该可以工作。它可以在我的机器上运行。您能否展示更多代码示例,例如如何设置“viewTAGradient”?
-
@kyaw.monkey 我添加了更多细节。
-
@Sweeper 我只是在一个固定高度 = 180 的水平堆栈中调用它们。在 20 的距离处均匀填充它们应该自动创建。编辑后见上文,bgColor 已正确应用,但渐变不会
-
检查你的布局约束......假设你的
viewTAGradient是标准UIView,如果你给它一个背景颜色而不是调用applyGradientDiagonal(),它的大小是否合适?
标签: ios swift xcode uiview uikit