Поле UITextField leftView/rightView обивка на iOS7
представления leftView и rightView UITextField на iOS7 действительно близки к границе текстового поля.
Как я могу добавить некоторые (горизонтальные) отступы к этим элементам?
Я попытался изменить кадр, но не работает
uint padding = 10;//padding for iOS7
UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];
iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);
textField.leftView = iconImageView;
Пожалуйста, обратите внимание, что я не заинтересован в добавление отступов к тексту текстового поля, как это установить заполнение для UITextField с UITextBorderStyleNone
6 ответов:
просто работал над этим сам и использовал это решение:
- (CGRect) rightViewRectForBounds:(CGRect)bounds { CGRect textRect = [super rightViewRectForBounds:bounds]; textRect.origin.x -= 10; return textRect; }
это переместит изображение справа на 10 вместо того, чтобы изображение сжималось до края в iOS 7.
кроме того, это было в подклассе
UITextField
, который может быть создан с помощью:
- создать новый файл, который является подклассом
UITextField
вместоNSObject
Добавить новый метод, названный
- (id)initWithCoder:(NSCoder*)coder
установить изображение- (id)initWithCoder:(NSCoder*)coder { self = [super initWithCoder:coder]; if (self) { self.clipsToBounds = YES; [self setRightViewMode:UITextFieldViewModeUnlessEditing]; self.leftView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"textfield_edit_icon.png"]]; } return self; }
возможно, вам придется импортировать
#import <QuartzCore/QuartzCore.h>
добавить
rightViewRectForBounds
методв Interface Builder, нажмите на текстовое поле, которое вы хотели бы подкласс и изменить атрибут класса на имя этого нового подкласса
гораздо более простое решение, которое использует
contentMode
:arrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"down_arrow"]]; arrow.frame = CGRectMake(0.0, 0.0, arrow.image.size.width+10.0, arrow.image.size.height); arrow.contentMode = UIViewContentModeCenter; textField.rightView = arrow; textField.rightViewMode = UITextFieldViewModeAlways;
В Swift 2,
let arrow = UIImageView(image: UIImage(named: "down_arrow")) arrow.frame = CGRectMake(0.0, 0.0, arrow.image.size.width+10.0, arrow.image.size.height); arrow.contentMode = UIViewContentMode.Center self.textField.rightView = arrow self.textField.rightViewMode = UITextFieldViewMode.Always
В Swift 3,
let arrow = UIImageView(image: UIImage(named: "arrowDrop")) if let size = arrow.image?.size { arrow.frame = CGRect(x: 0.0, y: 0.0, width: size.width + 10.0, height: size.height) } arrow.contentMode = UIViewContentMode.center self.textField.rightView = arrow self.textField.rightViewMode = UITextFieldViewMode.always
самый простой способ-добавить UIView в leftView / rightview и добавить ImageView в UIView , настроить происхождение ImageView внутри UIView в любом месте , где вам нравится, это сработало для меня как шарм. Для этого нужно всего несколько строк кода
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 5, 26, 26)]; imgView.image = [UIImage imageNamed:@"img.png"]; UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; [paddingView addSubview:imgView]; [txtField setLeftViewMode:UITextFieldViewModeAlways]; [txtField setLeftView:paddingView];
это отлично работает для Swift:
let imageView = UIImageView(image: UIImage(named: "image.png")) imageView.contentMode = UIViewContentMode.Center imageView.frame = CGRectMake(0.0, 0.0, imageView.image!.size.width + 20.0, imageView.image!.size.height) textField.rightViewMode = UITextFieldViewMode.Always textField.rightView = imageView