2015-09-11 12 views
5

jestem utworzenie UIImageView jako leftView na UITextField tak:Jak uzyskać lewe dopełnienie na UITextField leftView image?

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; 

który mnie pobiera następujące:

UITextField image

Jak widać po lewej rozmiar obrazu idzie aż do lewej krawędzi przycisku, mimo że próbowałem ustawić wstawkę. Jak mogę przenieść tę kopertę tak, aby miała dopełnienie ze wszystkich stron?


Aktualizacja: próbowałem proponowane odpowiedzi na zmianę UIImageView ramkę jak tak, ale koperta jest nadal w kolejce po lewej stronie przy granicy UITextField:

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

Próbowałeś zmienić CGRectMake (5, 0, self.height * 0,1, self.height * 0,1)], na przykład ... – Monicka

Odpowiedz

2

enter image description here można po prostu spróbuj tego:

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

tylko próbowałem, ale to widać żadnego efektu. Obraz jest w przybliżeniu taki sam. – helloB

+1

ile dałeś za x? –

+1

x nie może być CGFloat .. to jest jak na osi X, powinna być liczbą całkowitą. – Monicka

5

Dla Swift 3 Użytkownicy

Oto co pracował dla mnie:

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) 

wynik:

enter image description here

0

Można to wykorzystać. Zmień ramkę zgodnie z potrzebami.

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;