2015-09-11 23 views
5

Ich gründe eine UIImageView als leftView auf einem UITextField wie so hoch:Wie bekomme ich links Padding auf UITextField leftView Bild?

UIImageView *envelopeView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.height*.1, self.height*.1)]; 
envelopeView.image = [UIImage imageNamed:@"envelope.png"]; 
envelopeView.contentMode = UIViewContentModeScaleAspectFit; 
envelopeView.bounds = CGRectInset(envelopeView.frame, 15, 10); 
self.emailAddress.leftView = envelopeView; 
self.emailAddress.leftViewMode = UITextFieldViewModeAlways; 

, die nach mir die bekommt:

UITextField image

Wie Sie die linke Größe des Bildes sehen kann geht bis zum linken Rand der Schaltfläche, obwohl ich versucht habe, einen Inset zu setzen. Wie kann ich diesen Umschlag so verschieben, dass er von allen Seiten gepolstert ist?


Update: Ich habe versucht, die vorgeschlagene Antwort auf die UIImageView Rahmen wie so zu ändern, aber der Umschlag noch auf der linken Seite an der Grenze des UITextField aufgereiht:

CGFloat padding = 20; 
UIImageView *envelopeView = [[UIImageView alloc] initWithFrame:CGRectMake(3*padding, padding, self.height*.1-padding, self.height*.1-padding)]; 
+1

haben Sie versuchen CGRectMake (5, 0, self.height * 0,1, self.height * 0,1)] zum Beispiel zu ändern ... – Monicka

Antwort

2

enter image description here können Sie einfach versuchen Sie dies:

UIImageView *envelopeView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 0, 30, 30)]; 
    envelopeView.image = [UIImage imageNamed:@"comment-128.png"]; 
    envelopeView.contentMode = UIViewContentModeScaleAspectFit; 
    UIView *test= [[UIView alloc]initWithFrame:CGRectMake(20, 0, 30, 30)]; 
    [test addSubview:envelopeView]; 
    [self.textField.leftView setFrame:envelopeView.frame]; 
    self.textField.leftView =test; 
     self.textField.leftViewMode = UITextFieldViewModeAlways; 
+1

dies nur versucht, aber es zeigt keine Wirkung. Das Bild ist ungefähr gleich. – helloB

+1

Wie viel hast du für x gegeben? –

+1

x kann nicht CGFloat sein .. es ist wie auf der x-Achse, sollte eine ganze Zahl sein. – Monicka

5

Für Swift 3 User

Hier ist, was für mich gearbeitet:

extension UITextField { 

/// set icon of 20x20 with left padding of 8px 
func setLeftIcon(_ icon: UIImage) { 

    let padding = 8 
    let size = 20 

    let outerView = UIView(frame: CGRect(x: 0, y: 0, width: size+padding, height: size)) 
    let iconView = UIImageView(frame: CGRect(x: padding, y: 0, width: size, height: size)) 
    iconView.image = icon 
    outerView.addSubview(iconView) 

    leftView = outerView 
    leftViewMode = .always 
    } 
} 

Test:

txOrigin.setLeftIcon(icon_location) 

Ergebnis:

enter image description here

0

Sie diese nutzen können. Ändern Sie Ihren Rahmen nach Ihren Bedürfnissen.

NSTextAttachment* placeholderImageTextAttachment = [[NSTextAttachment alloc] init]; 
placeholderImageTextAttachment.image = [UIImage imageNamed:@"Search"]; 
placeholderImageTextAttachment.bounds = CGRectMake(0, -2, 16, 16); 
NSMutableAttributedString* placeholderImageString = [[NSAttributedString attributedStringWithAttachment:placeholderImageTextAttachment] mutableCopy]; 
NSMutableAttributedString* placeholderString = [[NSMutableAttributedString alloc] initWithString:NSLocalizedString(@" Search", nil)]; 
[placeholderImageString appendAttributedString:placeholderString]; 
_txtFieldSearch.attributedPlaceholder = placeholderImageString; 
_txtFieldSearch.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;