右对齐UITextField按空格键光标不移动问题求助
UITextField右对齐输入空格不显示的iOS15/16解决方案
针对UITextField设置textAlignment = .right时,输入空格无法即时显示、只有输入其他字符才显现的问题,结合iOS15/16的适配情况,分享几个实测有效的解决思路:
替换普通空格为全角空格
在shouldChangeCharactersIn代理方法里,把输入的普通空格替换成全角空格(\u{3000}),示例代码:func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if string == " " { let newText = (textField.text as NSString?)?.replacingCharacters(in: range, with: "\u{3000}") textField.text = newText return false } return true }全角空格在右对齐状态下能被系统即时渲染,视觉效果和普通空格差异不大,能解决不显示的问题。
输入空格后强制刷新文本
在textFieldDidChangeSelection代理方法中,检测到文本包含空格时,强制触发控件刷新:func textFieldDidChangeSelection(_ textField: UITextField) { guard textField.text?.contains(" ") == true else { return } textField.setNeedsDisplay() }这个操作能让系统重新渲染文本,空格就能即时显示出来。
自定义UITextField重写绘制逻辑
如果前两种方法都无效,可以自定义子类重写文本绘制方法,绕过系统默认渲染逻辑:class RightAlignedTextField: UITextField { override func drawText(in rect: CGRect) { guard let text = text, let font = font else { super.drawText(in: rect) return } let attrs: [NSAttributedString.Key: Any] = [.font: font] let attributedText = NSAttributedString(string: text, attributes: attrs) // 可根据需求调整内边距,这里右侧留8pt间距 attributedText.draw(in: rect.inset(by: UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 8))) } }
内容的提问来源于stack exchange,提问作者beowulf
相关产品推荐
相关产品推荐

