2017-03-06 7 views
0

Ich versuche, ein UIView (Banner) über der Liste (tableView) setzen, damit die UIview nicht verschwindet, wenn der Benutzer in der Liste scrollt. Ich habe diesen Code versucht, hat aber nicht funktioniert.UiView oben auf dem TableView

override func viewDidLayoutSubviews() { 
    self.view.addSubview(banner) 
    banner.frame.size.width = self.view.frame.size.width 
} 
override func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    var rect = self.banner.frame 
    rect.origin.y = max(0,scrollView.contentOffset.y + scrollView.contentInset.top) 
    self.banner.frame = rect 
} 

Irgendein Rat, wie man es repariert? Danke

+1

Bitte teilen Sie Ihr Design, was Sie genau –

+0

tun wollen, warum sind Sie Scroll-View-Funktion mit einer Tabellenansicht mit? du hast nur die Breite des Banners definiert, was ist mit Höhe? –

+0

Unterklassieren Sie Ihren View-Controller von 'UIViewController' oder' UITableViewController'? Kannst du einen Screenshot von dem, was du willst, teilen? – Adeel

Antwort

2

Anstatt zu versuchen, die Ansicht innerhalb der scrollView, eine viel einfachere Methode einen Standard UIViewController mit einem UIView an die Spitze mit constraints und UITableView an die Unterseite der UIView und die angeschlossenen mit AutoLayout angebracht verwenden würde zu halten sein Unterseite der UIViewController.

Mit diesem Layout nur Ihre kleinen tableView wäre Scrollen und Ihre UIView würde anstelle außerhalb des Anwendungsbereichs des Scrolling UITableViewCells stationär sein.

Wenn Sie derzeit ein UITableViewController verwenden, müssen Sie die override Modifikatoren von Ihren tableView Methoden entfernen, machen Sie Ihre UIViewController implementieren UITableViewDataSource und UITableViewDelegate, dann ist die delegates entweder im Code oder Storyboard anbringen.

Ihr neues UIViewController würde an der Spitze wie folgt aussehen:

class MyController: UIViewController, UITableViewDataSource, UITableViewDelegate { 
    ... 
} 
+0

Ja, ich dachte darüber nach, aber ich dachte, es sollte einen Weg geben , wie man die uiview an die Spitze klebt, weil es nicht der Teil der Hauptzellen der Liste ist (tableView) – lukas28277

+0

@ lukas28277 gibt es. Überprüfen Sie den doppelten Link, den ich gerade gemacht habe. –

+0

@ lukas28277 Die Tatsache, dass die Ansicht nicht Teil der Hauptzellen der Liste ist, ist der genaue Grund, warum ich meinen Ansatz empfehlen würde. Es trennt diese Accessory-Ansicht, die Sie beschreiben, vollständig von Ihrer Tabellenansicht und der Logik der Tabellenansicht. – Kyle

Verwandte Themen