Domanda

Se hai un UITableView semplice (non raggruppato) con una singola riga, il resto dello schermo viene riempito con celle vuote o vuote. Come si modifica l'aspetto di queste celle vuote? In primo luogo, ho pensato che avrebbero avuto l'aspetto della cella utilizzata nella vista tabella ma sembra che non lo faccia.

Le persone di Cultured Code (Things) hanno fatto un buon lavoro modificando queste celle ma non riesco immediatamente a pensare a un modo per cambiare il loro aspetto.

Qualche consiglio?

È stato utile?

Soluzione

Anche se non è proprio quello che stai cercando, puoi anche cambiarlo per visualizzare solo un'area vuota (anziché celle vuote) impostando una vista a piè di pagina sulla tabella. Una vista UIV di altezza 0 farà il trucco.

Altri suggerimenti

Basato sulla risposta di samvermette , ma modificato per utilizzare direttamente un'immagine di sfondo anziché comporre un'immagine da una sottoclasse UITableViewCell. La risposta di Sam è buona, ma sarà meno performante della semplice creazione di un'immagine di sfondo direttamente.

Crea una sottoclasse UIView - in questo esempio l'ho chiamato CustomTiledView - e ho aggiunto il seguente codice alla classe:

- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"tableview_empty_cell_image"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM (context, 1, -1); 
CGContextDrawTiledImage(context, 
                        CGRectMake(0, 0, rect.size.width, image.size.height), 
                        [image CGImage]); 
}

Aggiungi il seguente codice al tuo controller di visualizzazione tabella:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForFooterInSection:(NSInteger)section {
    // this can be any size, but it should be 1) multiple of the 
    // background image height so the last empty cell drawn
    // is not cut off, 2) tall enough that footer cells
    // cover the entire tableview height when the tableview
    // is empty, 3) tall enough that pulling up on an empty
    // tableview does not reveal the background.
        return BACKGROUND_IMAGE_HEIGHT * 9; // create 9 empty cells
}

- (UIView *)tableView:(UITableView *)tableView 
            viewForFooterInSection:(NSInteger)section {
    CustomTiledView *footerView = [[CustomTiledView alloc] init];
    return [footerView autorelease];
}

Infine, dovrai impostare l'inserzione del contenuto inferiore della vista tabella sul negativo del valore restituito da -tableView: heightForFooterInsection: In questo esempio sarebbe -1 * BACKGROUND_IMAGE_HEIGHT * 9 . È possibile impostare l'inserzione del contenuto inferiore dall'Ispettore dimensioni di Interface Builder o impostando la proprietà self.tableView.contentInset da tableviewcontroller.

Cheers!

Ho impostato una sottoclasse UIView alta ~ 300px per le visualizzazioni di intestazione e piè di pagina di TableView, regolando gli inserti tableView in modo che compensino queste viste (imposta gli inserti superiore e inferiore su -300px).

La mia sottoclasse UIView implementa il metodo drawRect, in cui utilizzo CGContextDrawTiledImage () per disegnare ripetutamente un UITableViewCell vuoto:

- (void)drawRect:(CGRect)rect {

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 46),NO,0.0);
    emptyCell = [[SWTableViewCell alloc] initWithFrame:CGRectZero];
    [emptyCell drawRect:CGRectMake(0, 0, 300, 46)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    [emptyCell release];
    UIGraphicsEndImageContext();

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextScaleCTM (context, 1, -1); // this prevents the image from getting drawn upside-down
    CGContextDrawTiledImage(context, CGRectMake(0, 0, 300, 46), [newImage CGImage]);
}

Nel mio caso le mie tableviewcell sono alte 46px, quindi se voglio che la sottoclasse UIView contenga 8 di queste celle vuote, devo renderla alta 368px.

Da http://jomnius.blogspot.com /2011/03/hide-uitableview-empty-cell-separator.html Il modo più semplice è definire che la tabella non ha linee di separazione delle celle:

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

Il modo più duro, se hai bisogno di linee di separazione, è definire che la tabella non ha linee di separazione e creare linee di separazione di celle come parte di UITableViewCell personalizzato. Parte inferiore della cella, ovviamente, e molto probabilmente usando un'immagine grafica davvero sottile. Ricorda di definire correttamente il ridimensionamento automatico delle immagini e la modalità.

Un altro modo è definire una tabella vuota di UITableViewFooterView:

UIView *footer =
    [[UIView alloc] initWithFrame:CGRectZero];
self.myTable.tableFooterView = footer;
[footer release];

Se desideri semplicemente modificare l'altezza delle " celle vuote " quando non ci sono celle in TableView: devi impostare la proprietà rowHeight di UITableView (l'implementazione di tableView: heightForRowAtIndexPath: non ha alcun effetto su TableViews vuote) . Se ci sono celle in TableView e hai implementato tableView: heightForRowAtIndexPath: , per le celle vuote verrà utilizzata l'altezza dell'ultima riga.

Probabilmente dovrai creare una sottoclasse personalizzata di UITableView che riempie lo sfondo con l'aspetto di celle vuote.

- (void)drawRect:(CGRect)rect {
  [super drawRect: rect];

  // draw your background here if the rect intersects with the background area
}

Credo che l'approccio dell'uso del metodo UITableView tableView: viewForFooterInSection: non funzionerà nel caso in cui la tabella è vuota, cioè senza celle. In tal caso, puoi utilizzare la tecnica Answerbot proposta che può essere riproposta per riempire il UIView creato nella vista piè di pagina della tabella esplicitamente, come il seguente:

    CGRect cellRect = CGRectMake(0, 0, table.bounds.size.width, table.bounds.size.height);
    CustomTiledView *footerView = [[[CustomTiledView alloc] initWithFrame:cellRect] autorelease];
    table.tableFooterView = footerView;

Per rapido 4.0 :

self.tableView.tableFooterView = UIView(frame: CGRect.zero)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top