Domanda

Ho un UITableView che non viene ridimensionata correttamente utilizzando autoresizeMask (in iPhone 3.0).

L'UITableView è all'interno di un'UIViewController all'interno di un UINavigationController all'interno di un UITabBarController, che sono tutti in fase di creazione programatically. La barra di stato è visibile.

Il codice del UIViewController è fondamentalmente:

- (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];
}

Quando creato in questo modo, l'UITableView è leggermente più grande rispetto allo spazio disponibile. Se non mi sbaglio, è esattamente 44 pixel più grande, la dimensione della barra di navigazione.

Tuttavia, se il commento dalla riga commentata e commentare la riga successiva la dimensione del UITableView è esattamente a destra. Io preferirei usare autoresizingMask invece di calcolare manualmente la dimensione del UITableView. Che cosa sto facendo di sbagliato?

Grazie in anticipo!

È stato utile?

Soluzione

Il problema sembra essere che non ero installando la cornice della vista radice loadview. Se si definisce tale telaio, e quindi definire la cornice dei subviews in relazione a tale telaio, poi le maschere AutoResize saranno correttamente ridimensionare le subviews a seconda di come la vista radice è stata ridimensionata dal quadro.

Ad esempio:

- (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];
}

Grazie a Colin Gislason, che mi ha segnalato nella giusta direzione.

Altri suggerimenti

La maschera il ridimensionamento automatico non vi aiuterà con la dimensione iniziale della vista tabella. La vista tabella viene creata con il telaio che si dà. La maschera ridimensionamento automatico definisce le regole per ridimensionare questo telaio rispetto alla vista primaria quando cambia telaio del genitore.

Quindi, se io definisco una tabella che è 320x100 rimarrà quella dimensione se non lo cambio esplicitamente o modifiche del telaio della vista padre.

A seconda delle altre viste, si potrebbe fare il calcolo in base alle altre viste detenute dalla Capogruppo o dalla struttura del genitore stesso.

Crea UIViewController sottoclasse instand di UITableViewController sottoclasse.

Inserisci esempio UITableView.

in NIB è sufficiente trascinare e rilasciare UIView

in cima a quel luogo wier l'oggetto UITableView esistente.

impostare la dimensione del UITableView tramite pennino o metodo viewDidLoad.

impostare il riferimento, dataSource e delegato tramite pennino.

ora il suo è sufficiente trasferire la classe UIViewController e la possibile modificare la dimensione Tableview come si desidera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top