2010-03-05 17 views
12

La vista tabella della mia app non occupa l'altezza a schermo intero, poiché ho consentito 50px in basso per un banner.iPhone SDK: impostazione della dimensione della vista tabella di UISearchDisplayController

Quando inizio a digitare nella barra di ricerca, la visualizzazione della tabella dei risultati di ricerca è maggiore; riempie tutto lo spazio disponibile sullo schermo tra la barra di ricerca e la barra delle schede. Ciò significa che l'ultimo risultato della ricerca è oscurato dal banner.

Come specificare la dimensione della vista tabella utilizzata da UISearchDisplayController? Non ci sono limiti o proprietà frame che posso vedere.

Modifica per aggiungere screenshots:

Questo è come la visualizzazione della tabella è impostato in IB. Termina 50px a breve della barra delle schede sintetizzata.

alt text http://iphone.lightwood.net/StackOverflow/gstableviewinib.png

Questo è visualizzata come contenuto normalmente. Ho fatto scorrere fino in fondo qui. alt text http://iphone.lightwood.net/StackOverflow/gstableviewatbottom.png

Ecco come viene visualizzato durante la ricerca. Di nuovo, ho fatto scorrere fino in fondo. Se disattivo l'annuncio banner, posso vedere che la tabella di visualizzazione della ricerca si estende fino alla barra delle schede.

alt text http://iphone.lightwood.net/StackOverflow/gssearchviewatbottom.png

+0

Vale anche la pena notare che ho provato diverse altezze della vista tabella e il risultato della ricerca risulta SEMPRE esteso nella parte inferiore dello schermo. Il problema non è che la barra di ricerca sia di circa 50 px, spingendo tutto dietro il banner. –

risposta

50

La chiave per risolvere questo è stato scoprire quando cambiare la geometria della vista tabella. Chiamata:

[self.searchDisplayController.searchResultsTableView setFrame:someframe]; 

dopo aver creato UISearchDisplayController era inutile. La risposta era questo metodo delegato:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 
    tableView.frame = someframe; 
} 

nota, avevo anche provato -searchDisplayController:didLoadSearchResultsTableView ma lo ha fatto nulla di buono in là. Devi aspettare fino a quando non viene visualizzato per ridimensionarlo.

Si noti inoltre che se si assegna semplicemente tableView.frame = otherTableView.frame, la tabella dei risultati della ricerca si sovrappone alla relativa barra di ricerca, quindi è impossibile cancellare o cancellare la ricerca!

Il mio codice finale si presentava così:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 

    CGRect f = self.masterTableView.frame; // The tableView the search replaces 
    CGRect s = self.searchDisplayController.searchBar.frame; 
    CGRect newFrame = CGRectMake(f.origin.x, 
           f.origin.y + s.size.height, 
           f.size.width, 
           f.size.height - s.size.height); 

    tableView.frame = newFrame; 
} 
+0

Grazie per l'accoppiamento. mi stava facendo impazzire! –

+0

Come dichiarare il 'someframe'? – user2872856

+0

@ user2872856 'tableView.frame' è un CGRect, quindi puoi fare:' CGRect someframe = CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height) ' – BigHeadCreations

0

Non sono sicuro capisco perfettamente quello che stai descrivendo, sarebbe bello avere uno screenshot.

Sembra che quello che sta succedendo sia UITableView è la dimensione dello schermo e il banner si sovrappone ai 50 pixel in basso. Tutti i bambini di UIView hanno proprietà frame, bound e center che ereditano dal loro genitore comune di UIView.

@interface UIView(UIViewGeometry) 

// animatable. do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead. 
@property(nonatomic) CGRect   frame; 

// use bounds/center and not frame if non-identity transform. if bounds dimension is odd, center may be have fractional part 
@property(nonatomic) CGRect   bounds;  // default bounds is zero origin, frame size. animatable 
@property(nonatomic) CGPoint   center;  // center is center of frame. animatable 
@property(nonatomic) CGAffineTransform transform; // default is CGAffineTransformIdentity. animatable 
// ... from UIView.h 

è possibile manipolare queste proprietà come ti piace, suona come è sufficiente per regolare i limiti per essere di 50 pixel più piccoli rispetto allo schermo, e fare un po 'di matematica per calcolare il nuovo centro.

+0

Ho aggiunto alcuni screenshot. In nessun momento sto impostando la geometria per la visualizzazione della tabella di ricerca. Se riesco a capire dove farlo, probabilmente è la risposta ... ma la proprietà searchResultsTableView di un UISearchDisplayController è di sola lettura. –

+0

La proprietà searchResultsTableView è di sola lettura, ma ciò significa che non è possibile modificare l'handle sul controller, dovresti essere in grado di manipolare la tableview stessa. – slf

+0

http://developer.apple.com/iphone/library/samplecode/TableSearch/index.html – slf

1

ho aggiornato il codice per consentire più profonde vista gerarchie, ma il fotogramma iniziale della vista copertura semitrasparente prende ancora in piedi l'intera finestra sotto la barra di ricerca .

Problemi correlati