El método privado UITableView
ejemplo _spacingForExtraSeparators
devuelve la altura de las filas de marcador de posición. Si no está escribiendo una aplicación para la App Store, simplemente anule eso. Devuelve un CGFloat.
Aquí hay un enfoque diferente que cumple con App Store (hasta donde yo sé), y podría ser más fácil que crear una fila ficticia.
UITableView
se envía a sí mismo el mensaje layoutSubviews
mucho. Lo hace cada vez que agrega, elimina o reorganiza celdas, y cada vez que se desplaza (y probablemente también otras veces). De modo que anulemos layoutSubviews
para dibujar una vista que comience en el borde inferior de la última sección de la vista de tabla. La vista se rellenará con un patrón repetitivo que se parece a las celdas de marcador de posición, con una altura que defina.
Crea una subclase de UITableView
. Dé a su subclase una variable de instancia UIView *_bottomView
. Necesitamos sobrescribir layoutSubviews
, por lo que inicializaremos _bottomView
perezosamente en ese método.
@implementation MyTableView
{
UIView *_bottomView;
}
Override layoutSubviews
. Lo primero que debe hacer en su layoutSubviews
es llamar al [super layoutSubviews]
, por lo que seguirá actuando como un UITableView
.
- (void)layoutSubviews
{
[super layoutSubviews];
La siguiente cosa que se hace es con pereza inicializar _bottomView
.
if (!_bottomView) {
Se necesita un patrón para llenar _bottomView
, y tiene que parecerse a las células de marcador de posición. Cree un contexto de imagen de 1 píxel de ancho y tan alto como desee que sea una celda de marcador de posición. Rellena el contexto con blanco y pinta una línea de separación (píxel, realmente) en la parte inferior. Obtener la imagen del contexto.
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();
A continuación, cree _bottomView
, establece sus antecedentes "color" a esa imagen como un patrón de repetición, y añadirlo a sí mismo como un subvista.
_bottomView = [[UIView alloc] initWithFrame:CGRectZero];
_bottomView.opaque = YES;
_bottomView.backgroundColor = [UIColor colorWithPatternImage:image];
[self addSubview:_bottomView];
} // end of if-block
Finalmente, encuentre el rect de su última sección. Use ese rect para calcular un marco para _bottomView
que comienza en la parte inferior de la última sección, es bastante alto (el doble de su altura es más que suficiente), y es tan ancho como el rect de la última sección.
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;
Por último, asegúrese de _bottomView
es su vista secundaria situada en primer plano por lo que sobregirar UITableView
's células de marcador de posición.
[self bringSubviewToFront:_bottomView];
} // end of layoutSubviews
Fin.
@end
No hay fila más allá de la última fila en una Vista de tabla (a menos que no esté entendiendo bien la palabra * último *). – PengOne
@PengOne Me refiero a las filas de marcador de posición que están allí cuando el número de elementos es menor que el número de filas que puede acomodar TableView. – pixelfreak
cambiar el tamaño de la altura del marco tableView para ocultar las filas marcador de posición? – changx