系统为我们提供了可以来重写的apileftViewRectForBounds
,但这需要你去创建一个子类,那么可不可以不使用继承来实现呢。
可以使用类别来实现。
.h文件
#import <UIKit/UIKit.h>
@interface UITextField (Extension)
@property (nonatomic,assign) UIEdgeInsets leftViewInset;
@property (nonatomic,assign) UIEdgeInsets rightViewInset;
@end
.m文件
#import "UITextField+Extension.h"
@implementation UITextField (Extension)
-(void)setLeftViewInset:(UIEdgeInsets)leftViewInset{
if (self.leftView) {
UIView *leftView = self.leftView;
self.leftView = nil;
UIView *backView = [[UIView alloc]init];
[backView addSubview:leftView];
[leftView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(leftViewInset.left);
make.centerY.mas_equalTo(backView.mas_centerY).offset(leftViewInset.bottom - leftViewInset.top);
}];
self.leftView = backView;
}
}
-(UIEdgeInsets)leftViewInset{
return UIEdgeInsetsZero;
}
-(void)setRightViewInset:(UIEdgeInsets)rightViewInset{
if (self.rightView) {
UIView *rightView = self.rightView;
self.rightView = nil;
UIView *backView = [[UIView alloc]init];
[backView addSubview:rightView];
[rightView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(rightViewInset.left);
make.centerY.mas_equalTo(backView.mas_centerY).offset(rightViewInset.bottom - rightViewInset.top);
}];
self.rightView = backView;
}
}
-(UIEdgeInsets)rightViewInset{
return UIEdgeInsetsZero;
}
@end