2013-10-08 7 views
8

In iOS 7 UISearchBar Platzhalter zentriert ausgerichtet und überlagern die Taste Lesezeichen, bis Suchleiste ausgewählten nicht:UISearchBar Platzhalter Ausricht- und Beschneiden in IOS 7

enter image description here

Wenn es ausgewählt wird, es erwartet aussieht:

enter image description here

ich brauche es auf diese Weise die ganze Zeit sieht. Vielen Dank.

+0

Bitte teilen Sie einige Code. Stellen Sie außerdem sicher, dass Sie einen Fehlerbericht mit Apple einreichen. –

+0

Sie brauchen keine Schriftgröße – codercat

+0

Was ist Ihre Uisearchbar Rahmengröße – codercat

Antwort

-2

Ich bin nicht hier, Ihnen eine allgemeine Lösung zu geben, aber wenn Sie einen Platzhalter muss hinzufügen, die dümmste und einfache Möglichkeit, es durch Verkürzen Sie den Platzhalter selbst, zu tun ist, so statt

searchBar.placeholder = @ "woord hier increeren";

lassen

searchBar.placeholder = @ "woord hier invo ..." sein;

Ich versuchte, mit den privaten Methoden von Apple, aber ohne Glück zu verwirren: Die searchBar Unteransichten sind: -UISearchBarBackground. -UISearchBarTextField. das UISearchBarBackground beiseite lassen die Untersichten der UISearchBarTextField-Instanz sind: -_UISearchBarSearchFieldBackgroundView. -UIImageView. -UISearchBarTextFieldLabel.

was ich ging für versucht, mit der rect (ich Betonung auf das Wort Chaos, wie diese sind private Methoden) der UISearchBarTextFieldLabel Coz bin ich ziemlich sicher, dass sein Rahmen nicht richtig gerendert, wenn die searchBar-Taste ist angezeigt (Lesezeichen), wenn Sie searchBar.showsBookmarkButton = NO wählen; Der placeHolder-Text wird wie erwartet gekürzt. Es liegt an dir, rette dich irgendwann und geh mit der dummen Lösung, aber das bringt Dinge zum Laufen oder taucht noch weiter. weiter so.

3

NEUE LÖSUNG:

// 
// WPViewController.m 
// test 
// 
// Created by VASANTH K on 02/01/14. 
// 
// 

    #import "WPViewController.h" 

    @interface WPViewController() 
    { 
     UILabel *lableCopy; 
    } 

    @end 

    @implementation WPViewController 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     //[self fixSearchBar:searchBar]; 
     // Do any additional setup after loading the view, typically from a nib. 

     self.searchBar.delegate=self; 
    } 

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    { 

     [self.searchBar resignFirstResponder]; 
     //[self fixSearchBar:searchBar]; 
    } 
    -(void)viewDidAppear:(BOOL)animated 
    { 
     [super viewDidAppear:animated]; 

     [self fixSearchBar:self.searchBar]; 

    } 

    - (void)didReceiveMemoryWarning 
    { 
     [super didReceiveMemoryWarning]; 
     // Dispose of any resources that can be recreated. 
    } 


    -(void)searchBarTextDidBeginEditing:(UISearchBar *)search 
    { 
     [self fixSearchBar:self.searchBar]; 
    } 

    -(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
    { 
     [self fixSearchBar:self.searchBar]; 
    } 

    -(void)fixSearchBar:(UISearchBar*)searchBar 
    { 
     UITextField *searchField = [searchBar valueForKey:@"_searchField"]; 

     // [searchField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"]; 

     UILabel *lable=[searchField valueForKey:@"_placeholderLabel"]; 

     if(!lableCopy) 
     { 
      lableCopy=[[UILabel alloc]initWithFrame:lable.frame]; 
      lableCopy.font=lable.font; 
      [lableCopy setText:lable.text]; 
      [lableCopy setTextColor:lable.textColor]; 
      UIButton *button; 

      for (UIView *view in [[[[searchBar.subviews objectAtIndex:0] subviews] objectAtIndex:1] subviews]) { 
       if([view isKindOfClass:[UIButton class]]) 
       { 
        button=(UIButton*)view; 
        break; 
       } 
      } 



      if(button) 
      { 
       //lable.hidden=YES; 
       CGRect newFrame=lable.frame; 
       newFrame.size.width=button.frame.origin.x-lable.frame.origin.x; 
       lableCopy.frame=newFrame; 
       [lableCopy adjustsFontSizeToFitWidth]; 
       //lableCopy.backgroundColor=[UIColor blackColor]; 
       [searchField addSubview:lableCopy]; 
       lableCopy.text=lable.text; 
       //lableCopy.textColor=[UIColor redColor]; 
      } 

     } 
     for (UIView *view in [[searchBar.subviews objectAtIndex:0] subviews]) { 
      if([view isKindOfClass:[UITextField class]]) 
      { 
       // NSLog(@"%@",view); 
       NSLog(@"TextFieldPresent==>%@",view); 
       if([view isFirstResponder]) 
       { 
        lable.hidden=NO; 
        lableCopy.hidden=YES; 
       } 
       else 
       { 
        lable.hidden=YES; 
        lableCopy.hidden=NO; 
       } 
       break; 
      } 
     } 

    } 


    @end 

Diese Lösung einfach ist das Hinzufügen neuer UILable Ansicht und blenden Sie die vorhandenen Platzhalter die echtes Gefühl von searchBar.Again zu geben, den tatsächlichen Platzhalter erneut anzuzeigen, wenn Suchleiste aktiv wurde.

Dies kann ein temporärer Hack sein, um das UI-Problem in IOS7 zu beheben.

When Inactive

When Active

alte Lösung: [Search setValue: [NSNumber numberWithBool: JA] forKeyPath: @ "_ placeholderLabel.adjustsFontSizeToFitWidth"];

funktioniert nicht in ios7, weil die Größe des für die Anzeige des Inhalts verwendeten Lable ausreicht, um den Text anzuzeigen, das Problem ist der Etikettenbreitenfehler von ios7. Es kann die Etikettenbreite nicht neu skalieren.

gibt es ein bisschen Hack, um dies zu beheben.

UITextField *searchField = [searchBar valueForKey:@"_searchField"]; 


    UILabel *lable=[searchBar valueForKey:@"_placeholderLabel"]; 
    lable.font=[UIFont fontWithName:lable.font.fontName size:10.0]; 

berechnen Sie die Schriftgröße basierend auf der eigenen Suchstrichbreite. Ich habe auch versucht, die Breite eines bestimmten Labels zu ändern, aber es funktioniert nie.

+0

Ich weiß nicht, wie man den Wert der Schriftart weil der Platzhaltertext in meinem Fall ist variabel, manchmal kommt es nur mit 1 Wort und manchmal füllt es die Platzhalter-Label und automatisch auf Punkte abgeschnitten (...) – JAHelia

+0

@JAHelia überprüfen Sie für die aktualisierte Antwort dieses Mal mehr perfekt als vorher – CoolMonster

+0

danke für den coolen Hack – JAHelia

Verwandte Themen