2013-10-08 12 views
8

In segnaposto iOS 7 UISearchBar allineato al centro e sovrapporre il pulsante Segnalibri fino barra di ricerca non selezionata:UISearchBar segnaposto allineamento e ritaglio in iOS 7

enter image description here

Quando è selezionata, appare come previsto:

enter image description here

ho bisogno che sembra in questo modo tutto il tempo. Grazie.

+0

Si prega di condividere un po 'di codice. Inoltre, assicurati di presentare una segnalazione di bug con Apple. –

+0

hai bisogno di qualsiasi dimensione di carattere – codercat

+0

qual è la dimensione della tua cornice uisearchbar – codercat

risposta

-2

Io non sono qui per darvi una soluzione generale, ma se si dispone di un segnaposto per aggiungere, il modo più stupida e facile da fare è troncando il segnaposto da soli, così invece di

searchBar.placeholder = @ "woord hier invoeren";

lascia che sia

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

ho provato a pasticciare con i metodi privati ​​di apple ma senza fortuna: le sottoview della barra di ricerca sono: -UISearchBarBackground. -UISearchBarTextField. lasciare UISearchBarBackground da parte le sottoview dell'istanza UISearchBarTextField sono: -_UISearchBarSearchFieldBackgroundView. -UIImageView. -UISearchBarTextFieldLabel.

quello per cui sono andato a cercare di incasinare il rect (i enfasi sulla parola pasticcio come questi sono metodi privati) di UISearchBarTextFieldLabel coz sono abbastanza sicuro che il suo frame non sia reso a destra quando il pulsante SearchBar è mostrato (segnalibro), se si sceglie searchBar.showsBookmarkButton = NO; il testo placeHolder verrà troncato come previsto. Spetta a te, salvarti da un po 'e andare con la soluzione stupida, ma che ottiene le cose, o approfondire ulteriormente. continua così.

3

NUOVA SOLUZIONE:

// 
// 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 

Questa soluzione è solo l'aggiunta di nuova vista UILable e nascondere il segnaposto esistente per dare la sensazione reale di searchBar.Again visualizzare nuovamente il segnaposto effettiva in cui la barra di ricerca è diventato attivo.

Questo potrebbe essere un trucco temporaneo per risolvere il problema dell'interfaccia utente in IOS7.

When Inactive

When Active

vecchia soluzione: [Campo di ricerca setValue: [NSNumber numberWithBool: SI] forKeyPath: @ "_ placeholderLabel.adjustsFontSizeToFitWidth"];

non funzionerà in iOS7 perché la dimensione dell'etichetta utilizzata per disaplay il contenuto è sufficiente per mostrare il testo, il problema è il bug dell'ampiezza dell'etichetta di ios7. non riesce a ridimensionare la larghezza dell'etichetta.

c'è un piccolo trucco per risolvere questo problema.

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


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

calcolare la dimensione del carattere in base alla larghezza della barra di ricerca. Ho anche provato a cambiare la larghezza di un'etichetta particolare ma non funziona mai.

+0

Non so come calcolare il valore del font perché il testo segnaposto nel mio caso è variabile, a volte viene fornito con solo 1 parola e talvolta riempie l'etichetta segnaposto e automaticamente troncato a punti (...) – JAHelia

+0

@JAHelia verifica la risposta aggiornata questa volta più perfetta di prima – CoolMonster

+0

grazie per il bel colpo – JAHelia

Problemi correlati