我在Swift中定制了一个UITableViewCell类。我在这个类中定义了一个textField,并为它添加了约束。
class DBCell: UITableViewCell {
var textField:UITextField?
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
textLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
fatalError("init(coder:) has not been implemented")
}
required override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
textLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
}
}
class DBEditCell: DBCell{
required init(coder aDecoder: NSCoder) {
uper.init(coder: aDecoder)
fatalError("init(coder:) has not been implemented")
}
required init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
if textField == nil
{
textField=UITextField(frame: CGRectZero)
}
textField?.textAlignment=NSTextAlignment.Left
textField?.clearButtonMode=UITextFieldViewMode.WhileEditing
textField?.enabled=true
self.shouldIndentWhileEditing=false
textField?.delegate=self
contentView.addSubview(textField!)
textLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
//Add constraints to textField
let hBinds=NSDictionary(objectsAndKeys:textLabel,"textLabel",textField!,"textField")
textField?.setTranslatesAutoresizingMaskIntoConstraints(false)
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[textLabel]-[textField]-|", options: nil, metrics: nil, views: hBinds))
let vBinds=NSDictionary(objectsAndKeys:textField!,"textField")
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[textField]-|", options: nil, metrics: nil, views: vBinds))
}
}
当我从tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath)创建自定义单元格并在UITableView中设置编辑时,它看起来很好。 但当我选择一个自定义单元格时,该单元格缩进并看起来很难看。 为什么自定义单元格左右移动?我该如何解决这个问题?任何建议都应该受到赞赏。
今天我向DBCell添加了约束:
let vBinds=NSDictionary(objectsAndKeys:textLabel,"textLabel")
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[textLabel]-|", options: nil, metrics: nil, views: vBinds))
我发现编辑时单元格包含中心,但是单元格仍然向左移动。我试图向textLabel添加水平约束,如下所示:
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[textLabel]-|", options: nil, metrics: nil, views: hBinds))
它没有用。
答案 0 :(得分:0)
问题解决了! 我已将代码修改为:
class DBCell: UITableViewCell {
var textField:UITextField?
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
fatalError("init(coder:) has not been implemented")
}
required override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
}
class DBEditCell: DBCell{
required init(coder aDecoder: NSCoder) {
uper.init(coder: aDecoder)
fatalError("init(coder:) has not been implemented")
}
required init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
if textField == nil
{
textField=UITextField(frame: CGRectZero)
}
textField?.textAlignment=NSTextAlignment.Left
textField?.clearButtonMode=UITextFieldViewMode.WhileEditing
textField?.enabled=true
self.shouldIndentWhileEditing=false
textField?.delegate=self
contentView.addSubview(textField!)
textField?.setTranslatesAutoresizingMaskIntoConstraints(false)
let hBinds=NSDictionary(objectsAndKeys:textField!,"textField")
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[textField]-|", options: nil, metrics: nil, views: hBinds))
let vBinds=NSDictionary(objectsAndKeys:textField!,"textField")
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[textField]-|", options: nil, metrics: nil, views: vBinds))
现在我没有为textLabel设置任何约束,只设置了对textField的约束,我得到了正确的对齐textField。