我需要在textField中设置顶部和底部边框。我很遗憾我缺乏知识。所以任何人都可以帮助我如何做可行bounds
属性这个代码我在tableviewCell类中设置来创建一个TextField。
class NewAdressForGustCell : UITableViewCell{
var areaTextField : RightPaddingTextField = {
var textField = RightPaddingTextField()
let topBorder = CALayer()
topBorder.frame = CGRect(0, 0, bounds.size.width, 1)
topBorder.backgroundColor = UIColor.gray.cgColor
textField.layer.addSublayer(topBorder)
let bottomBorder = CALayer()
bottomBorder.frame = CGRect(0, bounds.size.height-1, bounds.size.width, 1)
bottomBorder.backgroundColor = UIColor.gray.cgColor
textField.layer.addSublayer(bottomBorder)
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()
}
答案 0 :(得分:2)
问题是bounds
隐含地表示self.bounds
,并且您无法在初始化self(甚至隐式) >你在这里做self
的财产。这是有道理的,因为此时self
正是尚不存在的:我们仍在初始化它。
一个简单的解决方法是将此var areaTextField
标记为lazy
。这是有效的,因为它保证代码在 self
完全初始化之后之前不会运行。 (请注意,您必须仍明确 指向self
。)
class NewAdressForGustCell : UITableViewCell{
lazy var areaTextField : RightPaddingTextField = {
var textField = RightPaddingTextField()
let topBorder = CALayer()
topBorder.frame = CGRect(x:0, y:0, width:self.bounds.size.width, height:1)
topBorder.backgroundColor = UIColor.gray.cgColor
textField.layer.addSublayer(topBorder)
let bottomBorder = CALayer()
bottomBorder.frame = CGRect(x:0, y:self.bounds.size.height-1, width:self.bounds.size.width, height:1)
bottomBorder.backgroundColor = UIColor.gray.cgColor
textField.layer.addSublayer(bottomBorder)
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()
}