uitableviewdatasource uitableviewcontroller uitableviewcell example iphone objective-c cocoa-touch uitableview

iphone - uitableviewcell - uitableviewcontroller swift 4



¿Usando un UITableViewController con una tabla pequeña? (11)

Cuando se utiliza un UITableViewController, el método initWithStyle crea automáticamente el UITableView subyacente con, según la documentación, "las dimensiones correctas".

Mi problema es que estas "dimensiones correctas" parecen 320x460 (el tamaño de la pantalla del iPhone), pero estoy empujando este par TableView / Controller en un UINavigationController que está en sí mismo en un UIView, que a su vez tiene la mitad de altura que la pantalla.

No se puede pensar en ninguna discusión de marcos o límites que restablezca correctamente el tamaño de la tabla, y como tal es "demasiado larga", lo que significa que hay una colección de filas que se abren desde la parte inferior de la pantalla y no son visibles ni alcanzables. desplazándose.

Así que mi pregunta se reduce a: ¿cuál es la forma correcta de decirle a UITableViewController que cambie el tamaño de su componente UITableView a un rectángulo específico?

¡Gracias!

Actualización He intentado todas las técnicas sugeridas aquí en vano, pero encontré una cosa interesante: si omito por completo el UINavigationController (que aún no estoy dispuesto a hacer para la producción, sino como un experimento), y agrego el vista de tabla como una subvista directa de la vista adjunta que mencioné, se respeta el tamaño de fotograma proporcionado. En el momento en que reintroduzco el UINavigationController en la mezcla, sin importar si se agrega como una subvista antes o después de la vista de tabla, y no importa si alloc / init it antes o después de agregar la vista de tabla como subvista, el el resultado es el mismo que antes.

Estoy empezando a sospechar que UINavigationController no es un gran jugador de equipo ...

Actualización 2 La sugerencia de verificar el tamaño del marco después de la vista de tabla en la pantalla fue buena: resulta que el controlador de navegación de hecho está redimensionándolo en algún momento entre la carga y la pantalla. Mi solución, hacky en el mejor de los casos, ha sido guardar en caché el marco dado en la carga y restablecerlo si se cambia al comienzo de tableView: cellForRowAtIndexPath :. ¿Por qué lo preguntas? ¡Porque es el único lugar que encontré que funcionó, por eso!

No considero que esto sea una solución, ya que es obviamente inapropiado, pero para el beneficio de cualquier otra persona que lea, parece funcionar.


¿Por qué no simplemente usar un UIViewController regular y crear la tabla manualmente?


Compruebe las propiedades de autoresizingMask y contentMode de UITableView. Estos pueden afectar el marco.


Estoy de acuerdo con la respuesta de Ben. A menudo me he encontrado con la situación en la que necesito cambiar el tamaño de un UITableVIew debido a otros controles en una vista.

Normalmente solo tengo un UIViewController regular con un UITableView IBOutlet. Luego, si es necesario, puedo manipular el marco del objeto UITableView para que tenga el tamaño que necesito.


No estoy seguro de por qué está creando un controlador de vista adicional para su mesa. Sin embargo, en su código, no veo que agregue la vista de tabla a su padre. También puede intentar reducir la altura de los límites hasta que todo aparezca en la pantalla; Una vez que lo hagas, puede darte una idea de por qué no funciona de la manera que esperas.


Si está utilizando Interface Builder, simplemente puede ir a la ventana de propiedades "Tamaño de la vista de tabla" y cambiar los Incrustes inferiores para Contenido y Scroller con el alto de otro widget.


Tuve el mismo problema y lo resolví cambiando el tamaño de tableView en la función viewDidAppear del UITableViewController. No es la solución ideal, pero funciona.


Tuve el mismo problema y lo resolví con:

-(void) loadView { [self setView:[[[UIView alloc] initWithFrame:CGRectZero] autorelease]]; [[self view] setAutoresizesSubviews:NO]; /* Create & configure table and other views... */ [self setResultsTable:[[RadarTableViewController alloc] initWithNibName:nil bundle:nil]]; [[resultsTable view] setFrame:CGRectMake(0,45,320,200)]; }

Esto se hace en el controlador principal (solo un controlador UIView en mi caso).


Puede establecer el margen superior usando:

UIEdgeInsets inset = UIEdgeInsetsMake(50, 0, 0, 0); self.tableView.contentInset = inset;

No es una buena práctica, solo en caso de que quieras más espacio encima puedes usarlo.

No debe usar UITableViewController, simplemente use UIViewController y cree programáticamente UITableview


Establezca el marco en UINavigationController .


Tratar:

self.edgesForExtendedLayout = UIRectEdgeNone; //This one in case your NavigationController is not Translucent self.extendedLayoutIncludesOpaqueBars = NO;

Espero que esto ayude.


arreglé este problema con este código

{ UIEdgeInsets insets; insets.left = 0; insets.right = 0; insets.top = 0; insets.bottom = 60; self.tableView.contentInset = insets; [self.tableView setScrollIndicatorInsets:insets]; }