当输入语言是RTL / Arabic时,如何防止UITextfield改变对齐?

问题描述 投票:0回答:5

应用程序语言是英语,左边的插图显示UITextfields内容与左边对齐..这是正常的,但是当用户选择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

ios swift uitextfield arabic right-to-left
5个回答
1
投票

它出来了我正在使用的一些库导致这种效果,它是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
    }
}

谢谢。


0
投票

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

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


0
投票

在Swift 4中

textField.semanticContentAttribute = UISemanticContentAttribute.forceLeftToRight

0
投票

说实话,我尝试了所有这些并且对我不起作用,因为它与视图层次结构有关。有关更多信息,请阅读此note

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.