2012-05-09 10 views
17

einzubetten Wie kann ich die folgenden in einem UIViewController (ein Tableview als Subview enthält)Wie ein UITableView in einem UIScrollView

Ich habe zunächst eine UIViewController einen Vorschaubereich (UIView)

//Setup container for preview section 
UIView *tempContainer = [[UIView alloc]initWithFrame:CGRectMake(0, 20, 320, 100)]; 
self.preview_answer_container = tempContainer; 
self.preview_answer_container.backgroundColor = [UIColor clearColor]; 
[tempContainer release]; 
[self.view addSubview:self.preview_answer_container]; 
zeigt

ich habe auch eine UITableView (und searchbar) unter

//setup tableview 
UITableView *tempTable = [[UITableView alloc]initWithFrame:CGRectMake(0,44 ,320,self.view.frame.size.height - 44)]; 
self.tagFriendsTableView = tempTable; 
self.tagFriendsTableView.delegate = self; 
self.tagFriendsTableView.dataSource = self; 
[tempTable release]; 

[self.view addSubview:self.tagFriendsTableView]; 

enter image description here

Mit dieser Einrichtung ist meine Rolle im Bereich klein (nur statischer Bereich unterhalb Vorschaubereich)

Wie kann ich meinen Code ändern, dass 1) ich die ganze Seite werden nach oben Abschnitt und Tableview nach oben dh Vorschau zusammen blättern 2) Scrolling als ganze wird gestoppt, wenn die Suchleiste der oben (unten navbar erreicht) (siehe Screenshot), aber der Inhalt in der UITableView ist noch scrollbaren

enter image description here

EDIT:

Code für UIScroll-Ansicht hinzugefügt. Für mich hat sich jedoch nichts geändert. Was ist falsch an meinem Code?

//setup scroll view 
UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

//Search 
UISearchBar *tempBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 120 + 20, 320, 44)]; 
self.sBar = tempBar; 
[tempBar release]; 
self.sBar.delegate = self; 
self.sBar.tintColor = [UIColor colorWithHexString:@"#b6c0c7"]; 
self.sBar.placeholder = @"Search for FB and DM friends"; 

[scroll addSubview:sBar]; 

//setup tableview 
UITableView *tempTable = [[UITableView alloc]initWithFrame:CGRectMake(0,144 + 20 + 20 ,320,self.view.frame.size.height - 144 - 20 - 20 - 44)]; 
self.tagFriendsTableView = tempTable; 
self.tagFriendsTableView.delegate = self; 
self.tagFriendsTableView.dataSource = self; 
[tempTable release]; 

//Add the scroll view to the parent view 
[scroll addSubview:self.tagFriendsTableView]; 

scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); 
[self.view addSubview:scroll]; 
[scroll release]; 

Antwort

33

ich habe eine Lösung für Sie,

Verwendung nur Tableview genug ist

  1. die "Vorschau anzeigen" machen als HeaderView Ihrer Tableview

  2. die "Search Bar" make als die Sektion Kopfzeile Ansicht Ihrer TabelleView

können Sie machen es perfekt :)

+3

Dies funktioniert nur für eine Tabelle mit einem Abschnitt. – SAHM

+1

Kann mir irgendjemand mehr erklären für mich? Bitte – RaviJSS

1

Sie müssen Ihre UITableView innerhalb eines UIScrollView einzubetten, die die Größe des Bildschirms minus der Navigationsleiste hat. Setzen Sie den UIScrollViews-Hintergrund auf clearColor, damit Ihr Inhalt über der UITableView sichtbar bleibt.

+0

Hallo, vielen Dank für Ihre Antwort. Ich habe etwas Code für die UIScroll-Ansicht hinzugefügt, aber es funktionierte für mich nicht, d. H. Es hat sich nichts von meiner ursprünglichen Implementierung geändert. Kannst du mir helfen, meine bearbeitete Frage zu sehen? Ich habe dort meinen UISCRollview-Code hinzugefügt. Vielen Dank im Voraus – Zhen

+0

Sie sollten eigentlich mit DBD/Adali Lösung gehen, es ist besser als meins :) –

3

Keine Notwendigkeit für etwas Phantasie oder Gewohnheit, ein UITableView verwenden und Ihre Vorschaufenster setzen das tableHeaderView und Ihr Suchfeld wird die Abschnittsheader in Ihrem UITableViewDelegate mit tableView:viewForHeaderInSection: zu sein.

Der Tabellenkopf wird während des Bildlaufereignisses von oben nach unten verschoben. Abschnittsköpfe schweben und bleiben die ganze Zeit sichtbar, wenn dieser Bereich sichtbar ist. Wenn Sie nur eine Sektion haben, ist die Sektionskopfzeile die ganze Zeit da.

0

Ja, Sie können "tableView: viewForHeaderInSection" verwenden.

2

Oder Sie können nur die folgenden Schritte ausführen: 1. Deaktivieren Sie Scrollen der TableView. 2. Setzen Sie die height-Integritätsbedingung für die tableView und ein damit verbundenes IBOutlet. 3. Bevor Sie die Daten neu laden, berechnen Sie die Tischhöhe.heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

0
scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); 

Es kann nicht bewegen, weil Content nicht groß genug ist. Sie müssen die Länge auf die Gesamtlänge Ihres Inhalts erhöhen, die über der ScrollView liegt.

Verwandte Themen