2012-05-09 30 views
17

Làm thế nào tôi có thể làm như sau trong một UIViewController (có chứa một tableview như là một subview)Làm thế nào để nhúng một UITableView trong một UIScrollView

tôi ban đầu có một UIViewController cho thấy một phần preview (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]; 

tôi cũng đã thêm một UITableView (và một thanh tìm kiếm) bên dưới

//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

Với thiết lập này, vùng cuộn của tôi nhỏ (chỉ vùng tĩnh bên dưới phần xem trước)

Làm cách nào để sửa đổi mã của mình sao cho 1) Tôi có thể cuộn toàn bộ trang lên 2) cuộn như một toàn thể sẽ dừng lại khi thanh tìm kiếm đạt tới đỉnh (dưới navbar) (xem ảnh chụp màn hình), nhưng nội dung trong UITableView vẫn còn cuộn

enter image description here

EDIT:

Đã thêm mã cho chế độ xem UIScroll. Tuy nhiên, không có gì thay đổi đối với tôi. Có gì sai với mã của tôi?

//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]; 

Trả lời

33

tôi có một giải pháp cho bạn,

sử dụng chỉ tableView là đủ

  1. làm "Preview xem trang" làm HeaderView của bạn tableView

  2. làm "Search Bar" dưới dạng phần Header View của tableView

bạn có thể thực hiện nó hoàn hảo :)

+3

Điều này chỉ hoạt động cho một tableView với một phần. – SAHM

+1

Có thể cơ thể nào giải thích thêm cho tôi không ?? xin vui lòng – RaviJSS

1

Bạn sẽ phải nhúng UITableView bên trong UIScrollView có kích thước của màn hình trừ thanh điều hướng. Đặt nền UIScrollViews thành clearColor để cho phép nội dung của bạn ở trên UITableView vẫn hiển thị.

+0

Xin chào, cảm ơn phản hồi của bạn. Tôi đã thêm một số mã cho chế độ xem UIScroll nhưng nó không hoạt động đối với tôi, tức là không có gì thay đổi so với triển khai ban đầu của tôi. Bạn có thể giúp tôi xem câu hỏi đã chỉnh sửa của tôi không? Tôi đã thêm mã uiscrollview của mình ở đó. Cảm ơn trước – Zhen

+0

Bạn thực sự nên đi với DBD/adali của giải pháp, nó tốt hơn so với tôi :) –

3

Không cần bất cứ điều gì ưa thích hoặc tùy chỉnh, sử dụng UITableView và đặt ngăn xem trước là tableHeaderView và trường tìm kiếm của bạn làm tiêu đề phần bằng cách sử dụng tableView:viewForHeaderInSection: trong UITableViewDelegate.

Tiêu đề bảng sẽ cuộn lên trên cùng trong khi di chuyển sự kiện. Tiêu đề mục nổi và vẫn hiển thị toàn bộ thời gian phần đó nếu hiển thị. Nếu bạn chỉ có 1 phần thì tiêu đề phần sẽ ở đó toàn bộ thời gian.

0

Có, bạn có thể sử dụng "tableView: viewForHeaderInSection".

2

Hoặc bạn chỉ có thể thực hiện các bước sau: 1. Tắt cuộn bảngView. 2. Đặt giới hạn chiều cao cho tableView và một IBOutlet được kết nối với nó. 3. Trước khi bạn tải lại dữ liệu, hãy tính chiều cao của bảng.heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

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

Không thể cuộn vì nội dungKích thước không đủ lớn. Bạn cần tăng độ dài cho tổng chiều dài nội dung của bạn ở trên cùng của scrollView.

Các vấn đề liên quan