如果向下滚动一点,您将在第一张图片中看到的是fin应用程序的初始屏幕。基本上,您在屏幕上看到的每个部分都放置在垂直的堆栈视图中。然后,将每个标签和单元格放置在水平的堆栈视图中,依此类推,因此该应用程序会自动调整任何屏幕尺寸的大小。我正在使用故事板来创建元素。
最后一部分有两个蓝色的UITextField,它们后面有一个渐变层。我在一个单独的文件中创建了一个扩展UITextField类,该扩展文件中具有渐变函数构造函数,然后在另一个类中将渐变放置在具有该类的任何UITextField后面,如下所示:
extension UITextField {
func gradientBackground(firstColor: UIColor, secondColor: UIColor){
let gradientLayer = CAGradientLayer()
gradientLayer.frame = bounds
gradientLayer.colors = [firstColor.cgColor, secondColor.cgColor]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.startPoint = CGPoint(x:0.0, y:0.0)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.0)
layer.addSublayer(gradientLayer)
}
}
class gradientToTextField: UITextField {
var once = true
override func layoutSubviews() {
super.layoutSubviews()
if once {
self.gradientBackground(firstColor: UIColor(red: 0.30, green: 0.55, blue: 1.00, alpha: 1), secondColor: UIColor(red: 0.00, green: 0.36, blue: 1.00, alpha: 1))
once = false
}
}
}
现在,如果您看一下右边的第二个图像,则最后一个部分会在点击加号按钮时扩展。结果,第三部分(以Total开头)被隐藏,并且新的堆栈视图出现在同一部分的下面。除渐变图层外,所有内容都可以完美调整大小。我在它后面设置了一个红色背景,即UITextField的Background,因此突出显示了问题。渐变层的高度似乎比其父元素UITextField的高度短。
这是GitHub上的完整项目:https://github.com/silviuisidor/layerResizeProblem
我怎样才能解决这个问题?
最佳答案
tl:dr —使用渐变视图(而不是文本字段的子层),而将渐变视图和文本字段作为其子视图。
更多细节
代替渐变层,使用渐变视图。该视图的存在纯粹是为了将渐变层作为其基础层。您可以通过子类化UIView并实现layerClass
来返回CAGradientLayer.self
来进行安排。
class MyGradientView : UIView {
override class var layerClass : AnyClass { return CAGradientLayer.self }
private func config() {
let gradientLayer = self.layer as! CAGradientLayer
let firstColor = UIColor(red: 0.30, green: 0.55, blue: 1.00, alpha: 1)
let secondColor = UIColor(red: 0.00, green: 0.36, blue: 1.00, alpha: 1)
gradientLayer.colors = [firstColor.cgColor, secondColor.cgColor]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.startPoint = CGPoint(x:0.0, y:0.0)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.0)
}
override init(frame: CGRect) {
super.init(frame:frame)
self.config()
}
required init?(coder: NSCoder) {
super.init(coder:coder)
self.config()
}
}
现在,使文本字段成为渐变视图的子视图。使用自动布局将其固定到渐变视图的中心。渐变视图及其文本字段子视图是进入界面的内容。动画发生时,将调整渐变视图的大小!发生这种情况时,文本字段会自动随之重新定位。
关于ios - 重新调整布局大小后,如何在UITextField后面放置渐变层大小,使其与UITextField大小匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51543409/