Pregunta

Tengo un UITableView que no está siendo redimensionada correctamente usando autoresizeMask (en iPhone 3.0).

El UITableView está dentro de un UIViewController dentro de un UINavigationController dentro de un UITabBarController, todos los cuales están siendo creado mediante programación. La barra de estado es visible.

El código de la UIViewController es básicamente:

- (void)loadView {
    UIView* rootView = [[UIView alloc] init];
    self.view = rootView;
    [rootView release]; 
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-20-49-44)];
    table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:table];
}

Cuando se crea de esta manera, la UITableView es ligeramente más grande que el espacio disponible. Si no me equivoco, es exactamente 44 Píxeles más grandes, el tamaño de la barra de navegación.

Sin embargo, si yo elimine la línea comentada y comentar la siguiente línea del tamaño de la UITableView es exactamente correcto. Yo preferiría usar autoresizingMask en lugar de calcular manualmente el tamaño de la UITableView. ¿Qué estoy haciendo mal?

Gracias de antemano!

¿Fue útil?

Solución

El problema parece ser que no estaba poniendo el marco de la vista raíz en loadView. Si se define como marco, y luego definir el marco de las subvistas en relación a ese marco, a continuación, las máscaras AUTORESIZE cambiarán de tamaño correctamente los subvistas de acuerdo a la forma en la vista raíz fue cambiar el tamaño del marco.

Por ejemplo:

- (void)loadView {
    UIView* rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    self.view = rootView;
    [rootView release]; 
}

- (void)viewDidLoad {
    [super viewDidLoad];

    table = [[UITableView alloc] initWithFrame:self.view.frame]; 
    table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:table];
}

Gracias a Colin Gislason quien me señaló en la dirección correcta.

Otros consejos

La máscara de tamaño automático no le ayudará con el tamaño inicial de la vista de tabla. La vista de tabla se crea con el marco que le des. La máscara de tamaño automático define las reglas para cambiar el tamaño de este marco con respecto a la vista padre cuando los cambios de marco de los padres.

Así que si defino una tabla que es 320x100 que se mantendrá ese tamaño a menos que cambie de manera explícita o cambios de marco de la vista padre.

En función de los otros puntos de vista, se puede hacer el cálculo basado en los otros puntos de vista de los padres o por el propio marco de los padres.

Crea UIViewController subclase instantaneo de UITableViewController Subclase.

insertar ejemplo UITableView.

en SEMILLA simplemente arrastrar y soltar UIView

en la parte superior de ese lugar wier el objeto UITableView existente.

establecer el tamaño de la UITableView a través de la semilla o el método viewDidLoad.

establecer la referencia, dataSource y delegado a través de la semilla.

Ahora es simplemente transferir la clase y la UIViewController puede cambiar el tamaño tableview como desee.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top