2010-01-14 12 views
8

Come modificare la larghezza di UISearchBar quando si trova all'interno di un'intestazione di tabella in modo che l'indice di sezione non si sovrapponga al campo di testo? Voglio ricreare lo stesso layout che trovi nella vista contatti dell'app del telefono.UISearchBar Tabella Sezione Titoli indice Sovrapposizione

risposta

5

Una possibile soluzione è aggiungere una vista personalizzata a tableHeaderView. Questo è quello che ho fatto:

searchBar è un UISearchBar che ho dichiarato nel file di intestazione. Ho creato un UIView e aggiunto un UINavigationBar per l'intera larghezza e aggiungo il breve UISearchBar su di esso. Quindi, ho finalmente assegnato l'UIView a tableHeaderView.

searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 290.0, 44.0)]; 

UIView *customTableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)]; 
UINavigationBar *dummyNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)]; 
[customTableHeaderView addSubview:dummyNavigationBar]; 
[customTableHeaderView addSubview:searchBar]; 
[dummyNavigationBar release]; 

self.tableView.tableHeaderView = customTableHeaderView; 
[customTableHeaderView release]; 

una soluzione più elegante può essere quello di allungare l'UISearchBar utilizzando la proprietà contentStretch. Devo ancora provarlo e controllare se funziona.

+0

L'impostazione ** contentStretch ** non ha funzionato per me. – Sney

+0

@Snej hmm .. allora questa è l'unica soluzione che conosco .. grazie per avermelo fatto sapere :) – srik

+0

Funziona anche in uno storyboard. –

0

Se si utilizza un UISearchDisplayController, il comportamento desiderato funzionerà automaticamente come indicato in this answer.

1

Intendi la A-Z delle lettere indice sul lato destro dello schermo scavalcato nella barra di ricerca, come si vede in questa schermata in cui la "A" e la "B" appaiono nel bordo destro della barra di ricerca?

enter image description here

(a) non riesco a trovare un modo per evitare questo problema alfabeto-overrun. L'approccio collegato dalla risposta di Scott McCammon qui è vietato da Apple (e anche allora non sono sicuro che risolva questo problema).

(b) Vedo questo comportamento nelle app Apple Contatti in iOS 6.0.1 sul mio iPod touch (4a gen).

(c) Suppongo logicamente che non si tratti di un bug, poiché la barra di ricerca si trova nell'intestazione della vista tabella. L'intestazione fa parte della vista tabella e scorre come una parte della vista tabella, quindi forse ha senso che l'alfabeto dell'indice sia disegnato come nel resto della vista tabella.

Questo problema diventa più un problema quando si dispone di pulsanti di ambito. Sulla destra non è riservato spazio per i pulsanti di ambito, quindi l'alfabeto dell'indice si posiziona direttamente sul pulsante più a destra.

Problemi correlati