ios - 带有 UITextfield 的 UITableViewCell 没有以正确的方式居中

标签 ios uitableview swift

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

enter image description here

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/

相关文章:

ios - iOS 使用 Swift 记录应用程序在后台时的滑动量

objective-c - 空的 NSArray 是否相等?

ios - 将行动态添加到 UItableView,并为按钮保留最后两行

ios - 无法使具有标识符的单元格出列

ios - Swift-无法将核心数据转换为url参数

ios - 您可以使用 iOS 应用程序发送弹出通知吗?

ios - 当我的应用收到多个推送通知时会发生什么?

ios - 为 SpriteKit 游戏获取正确的位置/分辨率

ios - "cellForRowAtIndexPath"未调用 alertviewcontroller 内的 TableView

ios - 向后滑动 - interactivePopGestureRecognizer 不工作