将左边距添加到UITextField

iOS*_*wan 24 cocoa-touch alignment uitextfield ios leftalign

我想把UITextField文字的左边距放在10像素.最好的方法是什么?

Ria*_*rim 44

您可以通过扩展UITextField类和重写两个方法来实现:

- (CGRect)textRectForBounds:(CGRect)bounds;
- (CGRect)editingRectForBounds:(CGRect)bounds;
Run Code Online (Sandbox Code Playgroud)

这是代码:

界面在 MYTextField.h

@interface MYTextField : UITextField

@end
Run Code Online (Sandbox Code Playgroud)

它的实施 MYTextField.m

@implementation MYTextField

static CGFloat leftMargin = 28;

 - (CGRect)textRectForBounds:(CGRect)bounds
{
    bounds.origin.x += leftMargin;

    return bounds;
}

 - (CGRect)editingRectForBounds:(CGRect)bounds
{
    bounds.origin.x += leftMargin;

    return bounds;
}
@end
Run Code Online (Sandbox Code Playgroud)

  • 首先,我投了赞成票,但后来投了赞成票.如果为原点添加10 px,则需要从宽度中减去_20_ px,以在左侧和右侧保持相同的边距.正如上面已经提到的那样,通过一个类别的覆盖方法实际上是一个坏主意. (2认同)

clo*_*pez 20

正如我在之前的评论中所解释的那样,在这种情况下,最好的解决方案是扩展UITextField类而不是使用类别,因此您可以在所需的文本字段上明确使用它.

#import <UIKit/UIKit.h>

@interface MYTextField : UITextField

@end


@implementation MYTextField

- (CGRect)textRectForBounds:(CGRect)bounds {
    int margin = 10;
    CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height);
    return inset;
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    int margin = 10;
    CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height);
    return inset;
}

@end
Run Code Online (Sandbox Code Playgroud)

类别旨在向现有类添加新功能,而不是覆盖现有方法.

  • 里卡多,您好,您需要在Storyboard或Interface Builder中选择元素,然后在Identity Inspector中编辑自定义类。http://grrrab.it/5rr3xy (2认同)
  • 你重写的方法是做一些你不考虑的事情,例如不包括覆盖视图所占用的边框和空间......所以我会先调用super,看起来像这样:`return CGRectInset([super textRectForBounds :bounds],10.f,0.f);` (2认同)

btm*_*dan 11

UITextField * textField = [[UITextField alloc]init];
[textField setDelegate:self];
[textField setFrame:CGRectMake(170,112,140,25)];
[textField setBorderStyle:UITextBorderStyleNone];
[textField setBackgroundColor:[UIColor clearColor]];
[self.View addSubview:noofChildTField];

UIView *paddingView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)] autorelease];
textField.leftView = paddingView;
textField.leftViewMode = UITextFieldViewModeAlways;
Run Code Online (Sandbox Code Playgroud)

试试这个代码


Mam*_*mta 8

对于Swift 3:

做一个出口UITextField,比如usernameTextField.然后在下面编写以下代码viewDidLoad()

let paddingView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 20))
usernameTextField.leftView = paddingView
usernameTextField.leftViewMode = .always
Run Code Online (Sandbox Code Playgroud)

width: 5如果需要更多空间,请将值更改为更大的值.


Eth*_*ker 5

我希望在属性检查器中的IB中看到一个设置来调整此值。原来,我无意中将对齐方式和边框样式设置为与左侧填充混淆的值。

您不会认为选择左对齐和无边界没什么大不了的,但是这会使单词基本上重叠或右移到框的边缘,而且看起来不正确。

坏:

在此处输入图片说明

好:

在此处输入图片说明

为我修复它。希望这对其他人也有帮助。


小智 5

子类化 UITextField 并添加扩展:

extension UITextField {
    func paddingLeft(inset: CGFloat){
        self.leftView = UIView(frame: CGRect(x: 0, y: 0, width: inset, height: self.frame.height))
        self.leftViewMode = UITextField.ViewMode.always
    }
}
Run Code Online (Sandbox Code Playgroud)

用法

class MyUITextFieldClass: UITextField {
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        self.paddingLeft(inset: 10)
    }
}
Run Code Online (Sandbox Code Playgroud)