Ios UITableViewCell的UITextfield未以正确方式居中

Ios UITableViewCell的UITextfield未以正确方式居中,ios,uitableview,swift,Ios,Uitableview,Swift,我希望TableViewCells具有垂直居中的UITextField。我想我确实将NSLayoutConstraint设置正确,但是textfield没有居中。我做错了什么 func createCellAsEditableCell(){ let textField = UITextField(frame: CGRectMake(0, 0, self.contentView.frame.width, self.contentView.frame.height)) let vie

我希望TableViewCells具有垂直居中的
UITextField
。我想我确实将
NSLayoutConstraint
设置正确,但是
textfield
没有居中。我做错了什么

func createCellAsEditableCell(){
    let textField = UITextField(frame: CGRectMake(0, 0, self.contentView.frame.width, self.contentView.frame.height))
    let views = ["textField" : textField]
    self.contentView.addSubview(textField)

    let horizontalConstraint = NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[textField]", options: NSLayoutFormatOptions(0), metrics: nil, views: views)
    let verticalConstraint = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.contentView, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
    textField.setTranslatesAutoresizingMaskIntoConstraints(false)

    self.contentView.setTranslatesAutoresizingMaskIntoConstraints(false)
    NSLayoutConstraint.activateConstraints(horizontalConstraint)
    NSLayoutConstraint.activateConstraints([verticalConstraint])
    textField.placeholder = "Textfield"
}


我在这里看到的问题是,您同时混合了从代码设置帧和设置约束。您不希望将自动调整大小掩码转换为约束,然后将textField定位在容器中,但根据定位约束使其过大,无法适应contentView矩形(查看textField的宽度和为其设置的边距)

我要做的是:

1) 创建textfield,而不通过代码设置其框架(在objective-C中使用不同的初始化器->即[[UITextField alloc]init])

2) 保持中心约束不变

3) 像这样设置垂直约束
V:|[textField]|

4) 设置水平方向,如下所示
H:|-20-[textField]|


5) 不要在contentView上关闭TranslationAutoResizengMask,您不负责将其放置在其容器中,因此它显然是错误的

您是否为tableview实现了RowAtIndexPath的高度?看起来单元格的高度不是最佳的。是的,它已经实现了。谢谢你试着帮我,这就成功了。非常感谢。你能再告诉我一点,翻版自动保护面具到底做了什么?如果有帮助的话,请考虑一下投票。TranslateAuthorizingMask(将自动调整大小的掩码转换为约束)[对于未布局的组件,不应将其设置为“否”-基本上是说-未将其添加到视图层次结构:)