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 将不会滚动到光标位置。
我以编程方式添加了 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 将不会滚动到光标位置。