[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
엄청나게 긴 코드 필요 없음