我想要具有垂直居中的 UITextField
的 TableViewCells。我想我确实设置了 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 矩形(查看文本字段的宽度和您设置的边距它)。
我会做的是:
1) 创建文本字段而不通过代码设置其框架(使用不同的初始化程序 -> 在 objective-C 中将是 [[UITextField alloc]init])
2) 保持中心约束不变
3) 像这样设置垂直约束 V:|[textField]|
4) 像这样设置水平方向 H:|-20-[textField]|
5) 不要关闭 contentView 上的 translationAutoresizingMask,您不负责在其容器中对其进行布局,所以这显然是错误的!
关于ios - 带有 UITextfield 的 UITableViewCell 没有以正确的方式居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29856505/