Il UITableView
metodo privato esempio _spacingForExtraSeparators
restituisce l'altezza delle righe segnaposto. Se non stai scrivendo un'app per l'App Store, basta ignorarlo. Restituisce un CGFloat.
Ecco un approccio diverso che è conforme ad App Store (per quanto ne so) e potrebbe essere più semplice della creazione di una riga fittizia.
UITableView
invia a se stesso il messaggio layoutSubviews
molto. Lo fa ogni volta che aggiunge, rimuove o riorganizza le celle e ogni volta che scorre (e probabilmente anche altre volte). Quindi, sovrascriviamo layoutSubviews
per disegnare una vista che inizia dal bordo inferiore dell'ultima sezione della vista tabella. La vista verrà riempita con un motivo ripetuto che assomiglia a celle segnaposto con un'altezza definita dall'utente.
Creare una sottoclasse di UITableView
. Assegna alla sottoclasse una variabile di istanza UIView *_bottomView
. Dobbiamo ignorare lo layoutSubviews
, quindi inizializzeremo lo _bottomView
pigramente in questo metodo.
@implementation MyTableView
{
UIView *_bottomView;
}
Override layoutSubviews
. La prima cosa che fai nel tuo layoutSubviews
è chiamare [super layoutSubviews]
così continuerai a comportarti come un vero UITableView
.
- (void)layoutSubviews
{
[super layoutSubviews];
La prossima cosa che devi fare è pigramente inizializzare _bottomView
.
if (!_bottomView) {
Hai bisogno di un modello per riempire _bottomView
, e ha bisogno di guardare come le cellule segnaposto. Crea un contesto immagine largo 1 pixel e alto quanto vuoi che sia una cella segnaposto. Riempi il contesto con il bianco e dipingi una linea di separazione (pixel, in realtà) nella parte inferiore. Ottieni l'immagine dal contesto.
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, placeholderHeight), YES, 0);
[[UIColor whiteColor] setFill];
UIRectFill(CGRectMake(0, 0, 1, placeholderHeight));
[self.separatorColor setFill];
UIRectFill(CGRectMake(0, placeholderHeight - 1, 1, 1));
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Successivamente, creare _bottomView
, impostare lo sfondo "colore" a quell'immagine come un pattern ripetuto, e aggiungere te stesso come una visualizzazione secondaria.
_bottomView = [[UIView alloc] initWithFrame:CGRectZero];
_bottomView.opaque = YES;
_bottomView.backgroundColor = [UIColor colorWithPatternImage:image];
[self addSubview:_bottomView];
} // end of if-block
Infine, trova il retto della tua ultima sezione. Usa quel rettangolo per calcolare un frame per _bottomView
che inizia nella parte inferiore dell'ultima sezione, è molto alto (il doppio della tua altezza è più che sufficiente) ed è largo quanto il rect dell'ultima sezione.
int lastSectionIndex = [self.dataSource numberOfSectionsInTableView:self] - 1;
if (lastSectionIndex < 0)
lastSectionIndex = 0;
CGRect lastSectionRect = [self rectForSection:lastSectionIndex];
CGRect bottomViewFrame = CGRectMake(lastSectionRect.origin.x, CGRectGetMaxY(lastSectionRect), lastSectionRect.size.width, self.bounds.size.height * 2);
_bottomView.frame = bottomViewFrame;
Infine, assicurarsi _bottomView
è la vostra visualizzazione secondaria in primo piano in modo che si overdraw UITableView
's cellule segnaposto.
[self bringSubviewToFront:_bottomView];
} // end of layoutSubviews
Fine.
@end
Non c'è alcuna riga oltre l'ultima riga in un TableView (a meno che non abbia frainteso la parola * last *). – PengOne
@PengOne Mi riferisco alle righe segnaposto presenti quando il numero di elementi è inferiore al numero di righe che TableView può contenere. – pixelfreak
ridimensiona l'altezza del frameView della tabella per nascondere le righe del segnaposto? – changx