Ich habe Apple-Dokumente zur UITableView-Klasse und zur Delegatenreferenz durchgesehen, konnte jedoch keine Möglichkeit finden, die Höhe des Tabellenkopfs explizit festzulegen.
Ich habe die Tabellenzellenhöhe mit folgendem Delegaten festgelegt:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
und stellen Sie die Höhe der Kopf- / Fußzeile des Abschnitts mit den folgenden Delegaten ein.
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
Könnte mir bitte jemand helfen, die Höhe der Kopf- / Fußzeile der Tabelle festzulegen?
Vielen Dank.
iphone
uitableview
Applefreak
quelle
quelle
Antworten:
Legen Sie einfach die Frame-Eigenschaft von tableHeaderView fest.
quelle
Ich habe einen schönen Hack gefunden. Fügen Sie die folgende Zeile hinzu, nachdem Sie die Rahmeneigenschaft geändert haben
self.tableView.tableHeaderView = self.tableView.tableHeaderView;
Der Trick ist (glaube ich), dass die UITableView die Höhe (den Rahmen tatsächlich) zwischenspeichert, wenn Sie die Ansicht der tableHeaderView-Eigenschaft zuweisen. Die obige Zeile weist nur die Höhe erneut zu.
quelle
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() sizeHeaderToFit() } private func sizeHeaderToFit() { let headerView = tableView.tableHeaderView! headerView.setNeedsLayout() headerView.layoutIfNeeded() let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height var frame = headerView.frame frame.size.height = height headerView.frame = frame tableView.tableHeaderView = headerView }
Weitere Details finden Sie hier
quelle
Falls Sie es noch benötigen, haben Sie versucht, die Eigenschaft festzulegen
self.tableView.tableHeaderView
Wenn Sie die benötigte Höhe berechnen und eine neue Ansicht festlegen für
tableHeaderView
:CGRect frame = self.tableView.tableHeaderView.frame; frame.size.height = newHeight; self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];
Es sollte funktionieren.
quelle
Es funktioniert nur bei mir, wenn ich zuerst die Fußzeile / Kopfzeile der Tabellenansicht auf Null setze:
self.footer = self.searchTableView.tableFooterView; CGRect frame = self.footer.frame; frame.size.height = 200; self.footer.frame = frame; self.searchTableView.tableFooterView = nil; self.searchTableView.tableFooterView = self.footer;
Stellen Sie sicher, dass self.footer eine starke Referenz ist, um zu verhindern, dass die Zuordnung der Fußzeilenansicht aufgehoben wird
quelle
self.searchTableView.tableFooterView = self.searchTableView.tableFooterView;
funktioniert auch.Swift 4 - Sie können die Höhe mit HEIGHT_VIEW verwalten. Fügen Sie einfach diese Cods hinzu. Es funktioniert
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let HEIGHT_VIEW = 60 tableView.tableFooterView?.frame.size = CGSize(width: tblView.frame.width, height: CGFloat(HEIGHT_VIEW)) tableView.tableHeaderView?.frame.size = CGSize(width:tblView.frame.width, height: CGFloat(HEIGHT_VIEW)) }
quelle
Erstellen Sie einfach die Footer-Wrapper-Ansicht mit dem Konstruktor.
UIView(frame:_)
Wenn Sie die xib-Datei für FooterView verwenden, erstellen Sie eine Ansicht aus xib und fügen Sie sie als SubView zur Wrapper-Ansicht hinzu. Weisen Sie dann den Wrapper zutableView.tableFooterView = fixWrapper
.let fixWrapper = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 54)) // dont remove let footer = UIView.viewFromNib("YourViewXibFileName") as! YourViewClassName fixWrapper.addSubview(footer) tableView.tableFooterView = fixWrapper tableFootterCostView = footer
Es funktioniert perfekt für mich! Der Punkt ist, eine Fußzeilenansicht mit dem Konstruktor zu erstellen
(frame:_)
. Obwohl Sie UIView () erstellen und Frame-Eigenschaften zuweisen, funktioniert dies möglicherweise nicht.quelle
Wenn Sie in IB eine Ansicht als Tabellenkopfansicht hinzufügen, legen Sie den Rahmen dieser Ansicht in IB in Tab 5 fest (Größeninspektor).
quelle
Wenn Sie XIB für die HauptheaderView von tableView verwenden, können Sie XIB als Freiform festlegen. Stellen Sie die Höhe wie gewünscht ein und deaktivieren Sie die oberen, unteren Blöcke und oberen und unteren Pfeile von Autoresizing. Es werden nur horizontale Teile ausgewählt. Vertikal wird nicht ausgewählt, wie oben erwähnt .
quelle
Sie können eine UIView mit der gewünschten Höhe erstellen (die Breite sollte der der UITableView entsprechen) und darin eine UIImageView mit dem Bild der richtigen Abmessungen platzieren: Sie werden nicht automatisch gedehnt.
Sie können auch einen Rand über und unter der inneren UIImageView angeben, indem Sie der Containeransicht eine höhere Höhe geben.
Darüber hinaus können Sie eine Übersetzungstransformation zuweisen, um das Bild beispielsweise in der Mitte der Container-Header-Ansicht zu platzieren.
quelle
Wenn Sie das programmgesteuert einstellen
tableHeaderView
, stellen Sie es einfach einviewDidLayoutSubviews
.override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() setupTableViewHeader() } private func setupTableViewHeader() { // Something you do to set it up programatically... tableView.tableHeaderView = MyHeaderView.instanceFromNib() }
Wenn Sie es nicht programmgesteuert festgelegt haben, müssen Sie ähnliche Schritte ausführen, wie @Kris anhand dieses Links geantwortet hat
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() sizeHeaderToFit() } private func sizeHeaderToFit() { if let headerView = tableView.tableHeaderView { headerView.setNeedsLayout() headerView.layoutIfNeeded() let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height var frame = headerView.frame frame.size.height = height headerView.frame = frame tableView.tableHeaderView = headerView } }
quelle
@kris Antwort ist hilfreich für mich, jeder möchte es in Objective-C.
Hier ist der Code
-(void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; [self sizeHeaderToFit]; } -(void)sizeHeaderToFit{ UIView *headerView = self.tableView.tableHeaderView; [headerView setNeedsLayout]; [headerView layoutIfNeeded]; CGFloat height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; CGRect frame = headerView.frame; frame.size.height = height; headerView.frame = frame; self.tableView.tableHeaderView = headerView; }
quelle
In Xcode 10 können Sie die Kopf- und Fußzeile der Abschnittshöhe auf der Registerkarte "Größeninspektor" festlegen
quelle
Mit Autolayout können Sie Folgendes tun:
tableView.sectionHeaderHeight = UITableViewAutomaticDimension tableView.estimatedSectionHeaderHeight = <your-header-height>
oder wenn Ihre Header unterschiedlich hoch sind, setzen Sie Folgendes um:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return <your-header-height> }
quelle
Wenn Sie die Höhe von headerView von tableView geändert haben, setzen Sie einfach den Frame von headerView zurück und setzen Sie dann headerView von tableView zurück:
self.headerView.frame = newFrame; self.tableView.tableHeaderView = self.headerView;
quelle
Standardeigenschaft der Tabellenansicht verwenden:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 35.0; }
Vielen Dank
quelle
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { }
oder du kannst so auch verwenden
tableView.estimatedSectionHeaderHeight
quelle