UITextField의 시작 부분에 공간 만들기

여기처럼 UITextField의 시작 부분에 약간의 공백을 남겨두고 싶습니다: https://stackoverflow.com/questions/5674655/uitextfield-align-left-margin

하지만 스위프트로 어떻게 해야 할지 모르겠습니다.

질문에 대한 의견 (3)
해결책

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

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

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

다른 패딩은 설정하지 않았지만 조정할 수 있습니다. 이 클래스는 텍스트 필드의 오른쪽 뷰와 왼쪽 뷰를 처리하지 않습니다. 이를 올바르게 처리하려면 다음과 같은 것을 사용할 수 있습니다 (예 : 객체에서 오른쪽보기 만 필요했습니다:

- (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;
}
해설 (6)

확장명으로 사용하는 경우, 하위 위터스트필드 및 새로운 기능을 사용할 수 있게 될 필요는 없다 '는 모든 위터스트필드 in your app:

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)

스위프트는 연장, 기능을 사용하여 하위 클래스화 않고 직접 위터스트필드 추가됩니다.

이를 통해 희망을!

해설 (3)

X, Y, Z 는 원하는 값을 너회의

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

이러한 여백은 leftView / rightViewUITextField로 설정하면 얻을 수 있습니다.

스위프트 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를 추가 / 배치했습니다. 이제 보기 뒤에 타이핑이 시작됩니다.

Thanks

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

해설 (1)
  • 빠른 4, Xcode 9*

I like Pheepster& # 39 의 오토메이티드 에서, 이 모든 것을 할 수 있지만, 저희가 확장명은 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     
        }
    }
}
해설 (3)

xcode 에서 4.2 및 10 스위프트

처음에 내 텍스트 필드는 비슷합니다.

! [입력하십시오. 이미지 여기에 설명을] [1]

패딩 에 추가한 뒤 왼쪽 내 텍스트 필드 있다.

! [입력하십시오. 이미지 여기에 설명을] [2]

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

또한 이렇게 오른쪽면 작성할 수 있습니다. (테스트필드 마그리트비유무드 = 지아우와이스)

스케쳐내 샤르댕스턴스 문자 코드 (Write once 모든 소프트웨어를 사용하여) 아래 코드 참조.

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

3 개 솔루션 - 간단한 swift 코드를 추가할 비에우디드로이드:

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

긴 코드를 터무니없이 필요 없습니다.

해설 (2)
  • 뷰를 만들 수 있는 패딩 위터스트필드 5* 스위프트
func txtPaddingVw(txt:UITextField) {
    let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 5))
    txt.leftViewMode = .always
    txt.leftView = paddingView
}
해설 (0)

UITextField를 서브클래싱하는 것이 좋습니다. 플레이그라운드를 열고 다음 코드를 추가합니다:

class MyTextField : UITextField {
    var leftTextMargin : CGFloat = 0.0

    override func textRectForBounds(bounds: CGRect) -> CGRect {
        var newBounds = bounds
        newBounds.origin.x += leftTextMargin
        return newBounds
    }

    override func editingRectForBounds(bounds: CGRect) -> CGRect {
        var newBounds = bounds
        newBounds.origin.x += leftTextMargin
        return newBounds
    }
}

let tf = MyTextField(frame: CGRect(x: 0, y: 0, width: 100, height: 44))
tf.text = "HELLO"
tf.leftTextMargin = 25
tf.setNeedsLayout()
tf.layoutIfNeeded()
해설 (2)

이것은 Haagenti& # 39 의 오토메이티드 으로 업데이트되어야 스위프트 4.2:

class PaddedTextField: UITextField {

    func getPadding(plusExtraFor clearButtonMode: ViewMode) -> UIEdgeInsets {
        var padding = UIEdgeInsets(top: 11, left: 16, bottom: 11, right: 16)

        // Add additional padding on the right side when showing the clear button
        if self.clearButtonMode == .always || self.clearButtonMode == clearButtonMode {
            padding.right = 28
        }

        return padding
    }

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .unlessEditing)
        return bounds.inset(by: padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .unlessEditing)
        return bounds.inset(by: padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .whileEditing)
        return bounds.inset(by: padding)
    }

}

참조: 조속한 4.2 로 업그레이드.

  • 편집할지 *: 선택해제합니다 버튼를 차지하고 있습니다.
해설 (0)

이비에프 만드시겠습니까 패딩 공간과 함께 필요한 추가 멤버 위터스트필드비에프모데.알웨이스 테스트필드그레프트비유무드 迈向 테스트필드그레프트비에프 구성원 및 세트

// For example if you have textfield named title
@IBOutlet weak var title: UITextField!
// Create UIView 
let paddingView : UIView = UIView(frame: CGRectMake(0, 0, 5, 20))
//Change your required space instaed of 5.
title.leftView = paddingView
title.leftViewMode = UITextFieldViewMode.Always
해설 (0)

이 코드를 넣을 수 있는 '비에우디드로이드 ()'.

textField.delegate = self

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

작동하잖아 가져다줄래요:)

해설 (0)

이 한 줄의 코드가 저장된 봐요.

대해 # 사마린드리우스:

textField.Layer.SublayerTransform = CATransform3D.MakeTranslation(5, 0, 0);

대한 조속한:

textField.layer.sublayerTransform = CATransform3DMakeTranslation(5, 0, 0);
해설 (0)

의 스위프트 3. 사용자 정의 위터스트필드 설정된 구성자를 들여쓰려면 함께 사용할 수 있다. # 39, 추가로 선언에서 don& t need a 컨트롤러입니다.

class CustomTextField : UITextField {

private let indentView = UIView(frame: CGRect(x: 0, y:0, width: 10, height: 10))

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.leftView = indentView
    self.leftViewMode = .always 
        }
}
해설 (0)

39 의 오토메이티드 scarecrow& 3 의 스위프트

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)
}
해설 (0)
  • 쉽냐구요 way:* 이를 확장하여 위터스트필드
extension UITextField {

   func setPadding(left: CGFloat? = nil, right: CGFloat? = nil){
       if let left = left {
          let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: left, height: self.frame.size.height))
          self.leftView = paddingView
          self.leftViewMode = .always
       }

       if let right = right {
           let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: right, height: self.frame.size.height))
           self.rightView = paddingView
           self.rightViewMode = .always
       }
   }

}

그럼 이런 식으로 모든 모서리까지 여백을 설정할 수 있습니다.

textField.setPadding(left: 5, right: 5)
해설 (2)

내가 날 수 있도록 '속성' 클래스 '와' 이빈스펙터블 사용을 선호하지만 압데이네이블 패딩 스토리보드 및 재사용 가능한 조용히 Xcode 를 설정할 수 있습니다. # 39, Swift 코드를 수정하여 i& 역시 이제는 업데이트되도록 작업하십시오 4.

import Foundation
import UIKit

@IBDesignable
class PaddableTextField: UITextField {

    var padding = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)

    @IBInspectable var left: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var right: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var top: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var bottom: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    func adjustPadding() {
         padding = UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)

    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
    }

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }

    override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
         return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }
}
해설 (0)
  • 확장 위터스트필드 의 스위프트 5 *
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
        }
    }

}
해설 (0)