iOS中,当属性为右对齐时,UITextfield文本显示为左对齐?

5
我正在开发一款具有本地化功能的英语/阿拉伯语应用程序。在一个文本字段中,我将textAlignment属性设置为right。但是内容(数字)显示在右侧。
我通过调试textAlignment属性值进行了双重检查,确实是right
我已经以编程方式设置了对齐属性,因为它会根据语言选择(即在按钮点击时)而更改。然后我设置其值,并显示为右对齐。
问题在于当我选择文本字段时,内容突然向右移动并显示为右对齐。
我使用以下代码以编程方式更改布局为RTL和LTL:
UIView.appearance().semanticContentAttribute = .forceRightToLeft

我找不到解决方案。

3个回答

10

尝试这种方法

 if isLangEn
    { 
        self.textF.textAlignment = NSTextAlignment.left  
        self.parentViewOfTextF.semanticContentAttribute = UISemanticContentAttribute.forceLeftToRight  
    }
    else
    {   
        self.textF.textAlignment = NSTextAlignment.right
        self.parentViewOfTextF.semanticContentAttribute = UISemanticContentAttribute.forceRightToLeft  
    }

谢谢您的回复。我已经自己解决了。在加载视图时,我先设置值,然后设置对齐和布局。我改变了顺序,先布局再设置值。这样就行了 :) - Karan Alangat

0
在Xcode 14.1(或更早版本)中,有一个名为“自然”的文本对齐设置,这对我解决了问题。

0

要在更改语言时设置标签和文本字段文本的对齐方式,请使用以下代码行:

  1. To check app language:

    class Language {
    
      static var isArabicLanguage : Bool {
        get {
               return currentAppleLanguage() == "ar"
         }
       }
    }
    
  2. Create extension of UIViewController:

    extension UIViewController {
    
    //Align Textfield Text
    
    func loopThroughSubViewAndAlignTextfieldText(subviews: [UIView]) {
    if subviews.count > 0 {
        for subView in subviews {
            if subView is UITextField && subView.tag <= 0{
                let textField = subView as! UITextField
                textField.textAlignment = Language.isArabicLanguage ? .right: .left
            } else if subView is UITextView && subView.tag <= 0{
                let textView = subView as! UITextView
                textView.textAlignment = Language.isArabicLanguage ? .right: .left
    
            }
    
            loopThroughSubViewAndAlignTextfieldText(subviews: subView.subviews)
        }
      }
    }
    
    
    //Align Label Text
    func loopThroughSubViewAndAlignLabelText(subviews: [UIView]) {
    if subviews.count > 0 {
        for subView in subviews {
            if subView is UILabel && subView.tag <= 0 {
                let label = subView as! UILabel
                label.textAlignment = Language.isArabicLanguage ? .right : .left
            }
            loopThroughSubViewAndAlignLabelText(subviews: subView.subviews)
        }
       }
      }
    }
    
  3. Create new class Localizer which inherit from UIViewController which help us to set allignment of each viewController.

    class LocalizerViewController: UIViewController {
    
       override func viewDidLoad() {
          super.viewDidLoad()
    
          self.loopThroughSubViewAndAlignTextfieldText(subviews: self.view.subviews)
          self.loopThroughSubViewAndAlignLabelText(subviews: self.view.subviews)
      }
    }
    
  4. Now, Inherit all the ViewController to LocalizerViewController:

    class myViewController: LocalizerViewController {
           override func viewDidLoad() {
               super.viewDidLoad()
          }
    }
    
它将根据您的应用程序语言,将所有标签和文本字段的文本对齐到右侧或左侧。

不要再将它与阿拉伯语进行比较了,因为至少还有希伯来语存在。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接