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

时间:2018-02-10 21:00:07

标签: ios swift uitextfield

我已经以编程方式添加了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类和storyboard检查器中找到相应的属性 - 没有运气。检查了一些答案,例如this,但无法找到如何滚动文字。

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

enter image description here

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

enter image description here

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

3 个答案:

答案 0 :(得分:1)

试试这个

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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