iOS 以编程方式添加 UITextField 在编辑时不会将文本滚动到光标位置

iOS Added programmatically UITextField does not scroll text to cursor position while editing

我以编程方式添加了 UITextFields。这是一个例子:

addingItemView = UIView(frame: CGRect(x: 0, y: 0, width: viewWidth, height: viewHeight))
let itemNameTextField = UITextField(frame: CGRect(x: 20, y: 40, width: textFieldWidth, height: 20))
itemNameTextField.becomeFirstResponder()
itemNameTextField.placeholder = NSLocalizedString("itemName", comment: "")
itemNameTextField.keyboardType = .default
itemNameTextField.autocorrectionType = .no
itemNameTextField.backgroundColor = UIColor.white
itemNameTextField.layer.cornerRadius = 3
itemNameTextField.borderStyle = .roundedRect
itemNameTextField.clearButtonMode = .whileEditing
itemNameTextField.addTarget(self, action: #selector(assignValueToItemName), for: .editingDidEnd)

addingItemView.addSubview(itemNameTextField)

问题是:当用户键入的字符多于 UITextField 的长度时,文本不会水平滚动到左侧,就像在 Storyboard 中添加的 UITextFields 默认情况下发生的那样。所以用户无法看到他在那里输入的内容。

我试图在 UITextField class 和情节提要检查器中找到相应的 属性 - 没有运气。在这里检查了一些答案,例如 ,但无法找到如何滚动文本。

错误示例(光标不可见,但它是屏幕截图问题,因为它在闪烁):

很好的例子(在故事板中添加了 TextField,光标不可见,但它是屏幕截图问题,因为它在闪烁):

请告知我在这里遗漏了什么?我应该实现 EditingChanged 方法并以编程方式滚动文本吗?我试过了,但不知道该怎么做。我想移动光标到位置不是一回事。

试试这个

addingItemView.addSubview(itemNameTextField)
itemNameTextField.translatesAutoresizingMaskIntoConstraints = false
itemNameTextField.widthAnchor.constraint(equalToConstant: textFieldWidth).isActive = true
itemNameTextField.heightAnchor.constraint(equalToConstant: 20).isActive = true
itemNameTextField.leadingAnchor.constraint(equalTo: addingItemView .leadingAnchor, constant: 20).isActive = true
itemNameTextField.topAnchor.constraint(equalTo: addingItemView .topAnchor, constant:40).isActive = true

我的特殊问题已通过将高度大小从 20 增加到 25 得到解决。很可能是因为 iOS 由于字体大小和文本字段高度而无法调整文本。

let itemNameTextField = UITextField(frame: CGRect(x: 20, y: 40, width: textFieldWidth, height: 25))

如果 textField 的高度小于文本字体大小,textField 将不会滚动到光标位置。