iOS 以编程方式添加 UITextField 在编辑时不会将文本滚动到光标位置
Posted
技术标签:
【中文标题】iOS 以编程方式添加 UITextField 在编辑时不会将文本滚动到光标位置【英文标题】:iOS Added programmatically UITextField does not scroll text to cursor position while editing 【发布时间】:2018-02-10 21:00:07 【问题描述】:我以编程方式添加了 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 类和情节提要检查器中找到相应的属性 - 不走运。在这里检查了一些答案,例如this,但无法找到如何滚动文本。
不好的例子(光标不可见,但它是屏幕截图问题,因为它在闪烁):
很好的例子(在 Storyboard 中添加了 TextField,光标不可见,但这是截图问题,因为它在闪烁):
请告知我在这里缺少什么?我应该实现 EditingChanged 方法并以编程方式滚动文本吗?我试过了,但不明白该怎么做。我想将光标移动到位置不是一回事。
【问题讨论】:
你试过在代码中添加约束吗??? 不,我没有...会尝试,谢谢。 【参考方案1】:如果 textField 的高度小于文本字体大小,则 textField 不会滚动到光标位置。
【讨论】:
【参考方案2】:试试这个
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,它开始按预期工作。不知道为什么会这样,但确实发生了。【参考方案3】:通过将高度大小从 20 增加到 25 解决了我的特定问题。很可能是因为 ios 无法调整文本,因为字体大小和文本字段高度。
let itemNameTextField = UITextField(frame: CGRect(x: 20, y: 40, width: textFieldWidth, height: 25))
【讨论】:
以上是关于iOS 以编程方式添加 UITextField 在编辑时不会将文本滚动到光标位置的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 以编程方式在具有自动布局的 UITextField 内定位 UIImageView
如何以编程方式将标记 (UIControl) 添加到 UITextField 或 SearchBar?