[ios] UITextField의 시작 부분에 공간을 만듭니다.

UITextField의 시작 부분에 다음과 같이 약간의 공간을 남기고 싶습니다. UITextField에
왼쪽 여백 추가

그러나 Swift로 어떻게 해야하는지 모르겠습니다.



답변

이것은 내가 지금 사용하고있는 것입니다 :

스위프트 4.2

class TextField: UITextField {

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

    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)
    }
}

스위프트 4

class TextField: UITextField {

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

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }
}

스위프트 3 :

class TextField: UITextField {

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

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }
}

다른 패딩을 설정하지는 않지만 조정할 수는 있습니다. 이 클래스는 텍스트 필드에서 rightView 및 leftView를 처리하지 않습니다. 올바르게 처리하려면 (objc의 예와 같이 rightView 만 필요했습니다)

- (CGRect)textRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)placeholderRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeWhileEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)adjustRectWithWidthRightView:(CGRect)bounds {
    CGRect paddedRect = bounds;
    paddedRect.size.width -= CGRectGetWidth(self.rightView.frame);

    return paddedRect;
}


답변

확장을 사용하는 경우 UITextField를 서브 클래 싱 할 필요가 없으며 앱의 모든 UITextField에서 새 기능을 사용할 수 있습니다.

extension UITextField {
    func setLeftPaddingPoints(_ amount:CGFloat){
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.leftView = paddingView
        self.leftViewMode = .always
    }
    func setRightPaddingPoints(_ amount:CGFloat) {
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.rightView = paddingView
        self.rightViewMode = .always
    }
}

응용 프로그램의 어느 곳에서나 텍스트 필드의 패딩을 설정해야 할 때 간단히 다음을 수행하십시오.

    textField.setLeftPaddingPoints(10)
    textField.setRightPaddingPoints(10)

Swift 확장을 사용하면 서브 클래 싱없이 UITextField에 기능이 직접 추가됩니다.

도움이 되었기를 바랍니다!


답변

X, Y, Z는 원하는 값입니다

textField.layer.sublayerTransform = CATransform3DMakeTranslation(x, y, z)


답변

leftView/ rightView로 설정하면 이러한 마진을 얻을 수 있습니다.UITextField .

스위프트 4 업데이트

// Create a padding view for padding on left
textField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: textField.frame.height))
textField.leftViewMode = .always

// Create a padding view for padding on right
textField.rightView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: textField.frame.height))
textField.rightViewMode = .always

방금 추가 / 배치 UIView 텍스트 필드의 왼쪽과 오른쪽을 했습니다. 이제보기 후에 타이핑이 시작됩니다.

감사

이것이 도움이 되었기를 바랍니다 …


답변

스위프트 4, Xcode 9

나는 좋아한다 Pheepster의 답변을 하지만 VC 코드 또는 하위 클래스를 요구하지 않고 확장 프로그램에서 모두 수행하는 방법은 ?

import UIKit

@IBDesignable
extension UITextField {

    @IBInspectable var paddingLeftCustom: CGFloat {
        get {
            return leftView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            leftView = paddingView
            leftViewMode = .always
        }
    }

    @IBInspectable var paddingRightCustom: CGFloat {
        get {
            return rightView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            rightView = paddingView
            rightViewMode = .always
        }
    }
}


답변

에서 스위프트 4.2 엑스 코드 (10)

처음에 내 텍스트 필드는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

왼쪽에 패딩을 추가하면 내 텍스트 필드는 …

여기에 이미지 설명을 입력하십시오

//Code for left padding
textFieldName.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: textFieldName.frame.height))
textFieldName.leftViewMode = .always

이와 같이 오른쪽도 만들 수 있습니다. (textFieldName.rightViewMode = .always)

SharedInstance 유형 코드를 원하면 (모든웨어를 한 번 작성하십시오) 아래 코드를 참조하십시오.

//This is my shared class
import UIKit
class SharedClass: NSObject {
    static let sharedInstance = SharedClass()

    //This is my padding function.
    func textFieldLeftPadding(textFieldName: UITextField) {
    // Create a padding view
    textFieldName.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 3, height: textFieldName.frame.height))
    textFieldName.leftViewMode = .always//For left side padding
    textFieldName.rightViewMode = .always//For right side padding
    }

    private override init() {

    }
}

이제이 함수를 이렇게 호출하십시오.

//This single line is enough
SharedClass.sharedInstance.textFieldLeftPadding(textFieldName:yourTF)


답변

간단한 신속한 3 솔루션-viewDidLoad에 코드 추가 :

let indentView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 20))
textField.leftView = indentView
textField.leftViewMode = .always

엄청나게 긴 코드 필요 없음