Frage

Ich habe eine UITableView, die nicht richtig autoresizeMask mit der Größe verändert wird (in iPhone 3.0).

Die UITableView ist in einem UIViewController innerhalb eines UINavigationController innerhalb eines UITabBarController, von denen alle programmatisch erstellt werden. Die Statusleiste sichtbar ist.

Der Code des UIViewController ist im Grunde:

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

Wenn wie diese erstellt, ist die UITableView etwas größer als der verfügbare Platz. Wenn mich nicht alles täuscht, ist es genau 44 Pixel größer, die Größe der Navigationsleiste.

Allerdings, wenn ich die Kommentarzeile Kommentar- und kommentieren die Größe des UITableView die nächste Zeile ist hier genau richtig. Ich würde es vorziehen autoresizingMask zu verwenden, anstatt manuell die Größe des UITableView zu berechnen. Was mache ich falsch?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Das Problem scheint zu sein, dass ich nicht den Rahmen der Stammansicht in Loadview einstellen. Wenn Sie einen solchen Rahmen zu definieren, und dann den Rahmen der Subviews in Bezug auf diesen Rahmen definieren, dann werden die Autoresize Masken korrekt Subviews die Größe je nachdem, wie die Stammansicht durch den Rahmen der Größe verändert wurde.

Zum Beispiel:

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

Dank Colin Gislason, den ich in der richtigen Richtung.

Andere Tipps

Die automatischen Größen Maske werden Sie nicht mit der Anfangsgröße der Tabellenansicht helfen. Die Tabellenansicht wird mit dem Rahmen erstellt, dass Sie es geben. Der automatischen Größen Maske definiert die Regeln zum Ändern der Größe dieses Rahmens relativ zu der übergeordneten Ansicht, wenn die Rahmen Änderungen der Eltern.

Also, wenn ich eine Tabelle definieren, 320x100 ist es, dass die Größe bleiben, wenn ich es explizit ändern oder die übergeordneten Ansicht des Rahmens ändert.

In Abhängigkeit von den anderen Ansichten, könnten Sie die Berechnung tun, basierend auf den anderen Ansichten von der Mutter gehalten oder von den übergeordneten Rahmen selbst.

Erstellen UIViewController Unterklasse Instand von UITableViewController Subclass.

Insert UITableView Instanz.

in NIB einfach per Drag & Drop UIView

oben auf dieser wier Stelle des bestehende UITableView Objekt.

legen Sie die Größe des UITableView über nib oder viewDidLoad Verfahren.

Die Referenz, Datasource und Delegierter über nib.

nun seine einfach die UIViewController Klasse übertragen und die können Tableview Größe ändern, wie Sie möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top