簡體   English   中英

您如何在 Swift 4 中創建文本字段填充?

[英]How do you create textfield padding in Swift 4?

我有一個名為的文本字段

nameTextField

我用

nameTexfield.layer.cornerRadius = 5

現在,文本字段中的文本觸及左側。 我想在文本和邊框之間創建填充。 我發現的每篇文章都使用 cgRect,但 Swift 不再支持它。 如果您能弄清楚,請提供正確的代碼,如果可以,請解釋答案。 我感謝您的幫助! 如果有的話,我還需要知道把代碼放在哪里。

在 UITextField 的“左”、“右”或“雙”側添加填充的自定義方式。

第 1 步:-添加此 UITextfield 擴展

extension UITextField {

    enum PaddingSide {
        case left(CGFloat)
        case right(CGFloat)
        case both(CGFloat)
    }

    func addPadding(_ padding: PaddingSide) {

        self.leftViewMode = .always
        self.layer.masksToBounds = true


        switch padding {

        case .left(let spacing):
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: spacing, height: self.frame.height))
            self.leftView = paddingView
            self.rightViewMode = .always

        case .right(let spacing):
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: spacing, height: self.frame.height))
            self.rightView = paddingView
            self.rightViewMode = .always

        case .both(let spacing):
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: spacing, height: self.frame.height))
            // left
            self.leftView = paddingView
            self.leftViewMode = .always
            // right
            self.rightView = paddingView
            self.rightViewMode = .always
        }
    }        
}

第 2 步:如何使用

// 1.  To add left padding
yourTextFieldName.addPadding(.left(20)) 

// 2.  To add right padding
yourTextFieldName.addPadding(.right(20))

// 3. To add left & right padding both
yourTextFieldName.addPadding(.both(20))

正如@the4kman 所說,Swift確實支持CGRect但語法可能已經改變。

你可以試試這個,例如:

@IBOutlet weak var nameTextField: UITextField! {
    didSet {
        nameTextField.layer.cornerRadius =  5
        nameTextField.layer.borderColor = UIColor.black.cgColor
        nameTextField.layer.borderWidth = 1
        let leftView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 2.0))
        nameTextField.leftView = leftView
        nameTextField.leftViewMode = .always
    }
}

如果我這樣做,我會得到這個很好的結果

左填充

希望有幫助。

更新

你要求一個函數而不是在didSet中設置它,當然,那是可能的,比如:

func addPaddingAndBorder(to textfield: UITextField) {
    textfield.layer.cornerRadius =  5
    textfield.layer.borderColor = UIColor.black.cgColor
    textfield.layer.borderWidth = 1
    let leftView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 2.0))
    textfield.leftView = leftView
    textfield.leftViewMode = .always
}

然后你在viewDidLoad調用它,例如:

override func viewDidLoad() {
    super.viewDidLoad()
    addPaddingAndBorder(to: nameTextField)
}

如果您計划將圖像添加為左視圖,則最好將 textview 子類化而不是添加左視圖。

class UITextFieldPadding: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 40, bottom: 0, right: 0)

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM