输入语言为RTL /阿拉伯语时,如何防止UITextfield更改对齐方式?

时间:2019-01-04 19:47:48

标签: ios swift uitextfield arabic right-to-left

应用程序语言为英语,左图显示UITextfield的内容向左对齐。这是正常现象,但是当用户选择RTL /阿拉伯语输入语言时,字段对齐会自动翻转,如何在不考虑输入语言方向的情况下强制对齐?

编辑:

我尝试了这个,但并没有解决问题

    let _beginningOfDocument = fieldPassword!.beginningOfDocument
    let _endOfDocument = fieldPassword!.endOfDocument

    fieldPassword!.setBaseWritingDirection(.leftToRight, for: fieldPassword!.textRange(from: _beginningOfDocument , to: _endOfDocument )! )

swift alignment for keyboards uitextfields rtl

5 个答案:

答案 0 :(得分:0)

在您的应用程序委托中,添加以下内容:

if #available(iOS 9.0, *) { UIView.appearance().semanticContentAttribute = .forceLeftToRight }

答案 1 :(得分:0)

在情节提要中,文本字段属性中有一个从左到右的力,它可以为您解决问题。

答案 2 :(得分:0)

结果是我使用的某些库引起了这种影响,它是MOLH库,它使用了方法混乱,这就是为什么这很难调试的原因...

我将很快向其发出拉取请求,以使此效果为可选...

func listenToKeyboard() {
    NotificationCenter.default.removeObserver(self, name: UITextInputMode.currentInputModeDidChangeNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(inputModeDidChange), name: UITextInputMode.currentInputModeDidChangeNotification, object: nil)
}

@objc func inputModeDidChange(_ notification: Notification) {
    if let language = self.textInputMode?.primaryLanguage, MOLHLanguage.isRTLLanguage(language: language) {
        self.textAlignment = .right
    } else {
        self.textAlignment = .left
    }
}

谢谢。

答案 3 :(得分:0)

在Swift 4中

textField.semanticContentAttribute = UISemanticContentAttribute.forceLeftToRight

答案 4 :(得分:0)

说实话,我尝试了所有这些方法,但对我来说不起作用,因为它与视图层次结构有关。有关更多信息,您可以阅读此note

  

注意   当视图进入窗口时,iOS会应用外观更改,但不会更改窗口中已有视图的外观。要更改当前在窗口中的视图的外观,请从视图层次结构中删除该视图,然后将其放回原处。

所以尝试这个,对我有用:

extension UITextField {
   open override func awakeFromNib() {
    super.awakeFromNib()
    if Utilities.getCurrentLanguage() == "ar" {
        if textAlignment == .natural {
            self.textAlignment = .right
        }
      }
   }
 }

顺便说一句,“ Utilities.getCurrentLanguage()”是获取当前语言的函数。