2016-07-31 10 views
-1

Mein Ziel ist es, die Kopfhöhe des UITableView-Abschnitts zur Laufzeit zu ändern. Lass mich genauer sein. Die Standardhöhe ist 44, aber beim Scrollen vor dem Berühren des oberen wird die Höhe 64. Ich habe eine Unterklasse von UITableViewHeaderFooterView erstellt und es verwendet automatisches Layout.Ändern Sie die Höhe von UITableViewHeaderFooterView zur Laufzeit

versuchte ich

var frame = sectionHeader.frame 
frame.size.height = 64 
sectionHeader.frame = frame 

und

tableView.sectionHeaderHeight = 64 

auch, aber nichts für mich zu arbeiten. Kann jemand dieses Problem beleuchten?

+0

@ downvoter können Sie meine Frage beantworten? –

+0

Vielleicht kann Ihnen dieser Beispielcode von Apple helfen: [Table View Animationen und Gesten] (https: // developer.apple.com/library/ios/samplecode/TableViewUpdates/Introduction/Intro.html) – muazhud

+0

@muazhud danke .. lass mich genau hinsehen. –

Antwort

0
  1. wenn Automatisches Layout Wechselrahmen direkt verwendet, wird
  2. nicht funktionieren Tableview Abschnittsheader Sie Delegatmethode ändern müssen, implementieren und laden Daten nach der Änderung

optional func Tableview (_ Tableview: UITableView , heightForHeaderInSection Abschnitt: Int) -> CGFloat

+0

Wenn ich die Daten neu laden, wird die Animation gelöscht. –

0

Sie müssen die Fußzeile nicht Unterklasse, um die Höhe zu ändern.

  1. Prüfen Sie setzen nur I'ts Höhe: (keine Delegatmethoden)

tableView.sectionHeaderHeight = 64

  1. Prüfen Sie anrufen oder "reloadData()" in der TabelleView nach. oder

[UIView setAnimationsEnabled: NEIN];

[tableView beginUpdates];

[tableView endUpdates];

[UIView setAnimationsEnabled: YES];

Um nur die Höhe zu ändern, ohne das TableView neu zu laden.

0

Ich denke, dass Sie den gesamten Abschnitt der Tabellenansicht neu laden müssen, da es keine öffentliche API gibt, um nur die Abschnittsüberschrift zu aktualisieren.

self.isOnTop = true // or false 
tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: .None) 

Und eine Eigenschaft ändern, die den Rückgabewert aus dem aproppriate Delegatmethode modifiziert:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    isOnTop ? 44 : 64 
} 

Sie können auch die folgenden Methoden versuchen können, dass das Layout aktualisieren, ohne nachzuladen:

tableView.beginUpdates() 
tableView.endUpdates() 

Oder wechseln Sie zu einer Sammlungsansichtslösung, die das Verhalten der Tabellenansicht unterstützt: https://github.com/jamztang/CSStickyHeaderFlowLayout

+0

Danke, aber wenn ich den Abschnitt neu lade, ist die gewünschte Animation nicht nahtlos. –

Verwandte Themen