我想为我的UITextFields使用一个自定义背景。这很好,除了我必须使用UITextBorderStyleNone来使它看起来很漂亮。这将迫使文本保持在左边,没有任何填充。
我可以手动设置填充,使它看起来类似于UITextBorderStyleRoundedRect除了使用我的自定义背景图像?
我想为我的UITextFields使用一个自定义背景。这很好,除了我必须使用UITextBorderStyleNone来使它看起来很漂亮。这将迫使文本保持在左边,没有任何填充。
我可以手动设置填充,使它看起来类似于UITextBorderStyleRoundedRect除了使用我的自定义背景图像?
当前回答
我发现使用不可编辑的UITextView并设置contenttoffset要容易得多
uiTextView.contentOffset = CGPointMake(8, 7);
其他回答
你不能设置填充。而是有一个UIView,里面有你的背景图像和UITextField。设置UITextField的宽度为UIViewWidth-(paddingSize x 2)和高度相似,然后设置它在点paddingSize,paddingSize。
我发现使用不可编辑的UITextView并设置contenttoffset要容易得多
uiTextView.contentOffset = CGPointMake(8, 7);
Objective C代码
MyTextField.h
#import <UIKit/UIKit.h>
@interface MyTextField : UITextField
@property (nonatomic) IBInspectable CGFloat padding;
@end
MyTextField.m
#import "MyTextField.h"
IB_DESIGNABLE
@implementation MyTextField
@synthesize padding;
-(CGRect)textRectForBounds:(CGRect)bounds{
return CGRectInset(bounds, padding, padding);
}
-(CGRect)editingRectForBounds:(CGRect)bounds{
return [self textRectForBounds:bounds];
}
@end
最好的方法是使用UITextField的子类并在.m文件中创建一个类
#import "CustomTextField.h"
#import <QuartzCore/QuartzCore.h>
@implementation CustomTextField
- (id)initWithCoder:(NSCoder*)coder
{
self = [super initWithCoder:coder];
if (self) {
//self.clipsToBounds = YES;
//[self setRightViewMode:UITextFieldViewModeUnlessEditing];
self.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,15,46)];
self.leftViewMode=UITextFieldViewModeAlways;
}
return self;
}
通过这样做,去到你的故事板或xib,点击身份检查器,用你自己的“CustomTextField”在类选项替换UITextfield。
注意:如果你只是给文本框自动布局填充,那么你的应用程序将不会运行,只显示空白屏幕。
斯威夫特版本:
extension UITextField {
@IBInspectable var padding_left: CGFloat {
get {
LF.log("WARNING no getter for UITextField.padding_left")
return 0
}
set (f) {
layer.sublayerTransform = CATransform3DMakeTranslation(f, 0, 0)
}
}
}
这样你就可以在IB中赋值