Seit ich herausgefunden habe, dass AutoLayout
ich es überall benutze, versuche ich es jetzt mit einem zu benutzen tableHeaderView
.
Ich habe eine subclass
von UIView
hinzugefügt alles (Etiketten etc ...) ich mit ihren Zwängen wollte, dann habe ich diese CustomView
mit dem UITableView
' tableHeaderView
.
Alles funktioniert gut , außer den UITableView
immer Displays über die CustomView
, von oben Ich meine das CustomView
ist unter dem UITableView
so ist es nicht zu sehen!
Es scheint , dass egal , was ich tue, die height
von den UITableView
' tableHeaderView
ist immer 0 (so ist die Breite x und y).
Meine Frage: Ist das überhaupt möglich, ohne den Rahmen manuell einzustellen ?
EDIT:
Das CustomView
' subview
, das ich benutze, hat diese Einschränkungen:
_title = [[UILabel alloc]init];
_title.text = @"Title";
[self addSubview:_title];
[_title keep:[KeepTopInset rules:@[[KeepEqual must:5]]]]; // title has to stay at least 5 away from the supperview Top
[_title keep:[KeepRightInset rules:@[[KeepMin must:5]]]];
[_title keep:[KeepLeftInset rules:@[[KeepMin must:5]]]];
[_title keep:[KeepBottomInset rules:@[[KeepMin must:5]]]];
Ich verwende eine praktische Bibliothek 'KeepLayout', da das manuelle Schreiben von Einschränkungen ewig dauert und viel zu viele Zeilen für eine einzelne Einschränkung enthält, die Methoden jedoch selbsterklärend sind.
Und das UITableView
hat diese Einschränkungen:
_tableView = [[UITableView alloc]init];
_tableView.translatesAutoresizingMaskIntoConstraints = NO;
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.backgroundColor = [UIColor clearColor];
[self.view addSubview:_tableView];
[_tableView keep:[KeepTopInset rules:@[[KeepEqual must:0]]]];// These 4 constraints make the UITableView stays 0 away from the superview top left right and bottom.
[_tableView keep:[KeepLeftInset rules:@[[KeepEqual must:0]]]];
[_tableView keep:[KeepRightInset rules:@[[KeepEqual must:0]]]];
[_tableView keep:[KeepBottomInset rules:@[[KeepEqual must:0]]]];
_detailsView = [[CustomView alloc]init];
_tableView.tableHeaderView = _detailsView;
Ich weiß nicht, ob ich einige Einschränkungen direkt CustomView
für das festlegen muss. Ich denke, die Höhe der benutzerdefinierten Ansicht wird durch die Einschränkungen für den darin enthaltenen UILabel
"Titel" bestimmt.
BEARBEITEN 2: Nach einer weiteren Untersuchung scheinen Höhe und Breite der benutzerdefinierten Ansicht korrekt berechnet zu sein, aber die Oberseite der benutzerdefinierten Ansicht befindet sich immer noch auf der gleichen Ebene wie die Oberseite der UITableView und sie bewegen sich beim Scrollen zusammen.