2013-05-16 39 views
14

Tôi có một số UITableView mà tôi có thể thêm chế độ xem tiêu đề vào khá dễ dàng. Nhiều ứng dụng (như Facebook, để xem sự kiện) có headerView khi bạn kéo xuống, chế độ xem tiêu đề vẫn được đặt nhưng phần còn lại của bảng (số UITableViewCell) đang bị nảy. Khi cuộn lên tiêu đề biến mất. Làm thế nào tôi có thể đạt được chức năng này?Tiêu đề UITableVIew mà không bị nảy khi kéo xuống

Ngay bây giờ khi tôi kéo xuống UITableView, ngay cả những headerView bị trả cũng

+0

Khi bạn nói "thoát", bạn có nghĩa là cuộn lên/xuống qua các tiêu đề không? – Aaron

+0

Về cơ bản khi tôi cuộn xuống, tiêu đề vẫn được đặt. Khi tôi cuộn lên, tiêu đề biến mất. Đây là tableHeaderView – KVISH

+0

OK - Tôi đã kiểm tra chế độ xem bảng sự kiện của ứng dụng Facebook. Dường như nó có hành vi mặc định. Bạn có bao nhiêu phần và hàng trong các phần đó trong chế độ xem bảng? Có lẽ bạn không có đủ để có được hiệu quả mà bạn muốn? – Aaron

Trả lời

32

Bạn có thể đạt được hiệu ứng này khá dễ dàng bằng cách thêm một subview vào xem tiêu đề và điều chỉnh frame của nó hoặc transform khi xem bảng là cuộn ngoài phía trên, ví dụ: các thành phần y của contentOffset của nó trở nên tiêu cực.

Ví dụ (trong một lớp con UITableViewController):

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    CGFloat headerHeight = 64.0f; 
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, headerHeight)]; 
    UIView *headerContentView = [[UIView alloc] initWithFrame:headerView.bounds]; 
    headerContentView.backgroundColor = [UIColor greenColor]; 
    headerContentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    [headerView addSubview:headerContentView]; 
    self.tableView.tableHeaderView = headerView; 
} 

//Note: UITableView is a subclass of UIScrollView, so we 
//  can use UIScrollViewDelegate methods. 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGFloat offsetY = scrollView.contentOffset.y; 
    UIView *headerContentView = self.tableView.tableHeaderView.subviews[0]; 
    headerContentView.transform = CGAffineTransformMakeTranslation(0, MIN(offsetY, 0)); 
} 

(để giữ cho nó đơn giản, tôi đã chỉ được sử dụng các subview đầu tiên của cái nhìn tiêu đề thực tế trong scrollViewDidScroll:, bạn có thể muốn sử dụng một tài sản cho rằng thay vào đó.)

+1

Đá quý thực sự cho giải pháp này là sử dụng một subview trong tableHeaderView. Tôi đã cố gắng để làm điều này mà không có một subview và có kết quả rất lạ, do đó, subview là chìa khóa. – levigroker

+1

Giải pháp của bạn là tốt nhất: D –

+0

Nếu Bạn muốn mắc kẹt tiêu đề tableview trên đầu trang sau đó áp dụng mã này bị nén. - (void) scrollViewDidScroll: (UIScrollView *) scrollView { CGFloat offsetY = scrollView.contentOffset.y ; UIView * headerContentView = self.tableView.tableHeaderView.subviews [0]; if (offsetY> 0) { headerContentView.transform = CGAffineTransformMakeTranslation (0, offsetY); } else { tiêu đềContentView.transform = CGAffineTransformMakeTranslation (0, MIN (offsetY, 0)); } } – g212gs

-1

Có 2 cách để bạn có thể thiết lập các tiêu đề bảng:

  • Sử dụng .tableHeaderView sở hữu trực tiếp (điều này đầu cuộn với bảng)

  • Ghi đè chức năng - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section (tiêu đề này vẫn giữ nguyên với phần)

Bằng các âm thanh của nó, bạn nên sử dụng phương pháp thứ 2 thay vì sử dụng tài sản .tableHeaderView

+0

Tôi không nghĩ rằng điều này là chính xác. Tiêu đề phần của tôi cuộn lên và xuống, và dính vào đầu các dạng xem bảng khi bạn di chuyển và cho đến khi tiêu đề phần khác đẩy nó ra khỏi đường đi. – Aaron

+0

'tableHeaderView' là một tiêu đề cho toàn bộ bảng, trong đó' viewForHeaderInSection' đặt tiêu đề trên mỗi phần. – Aaron

0

bạn UITableView có khả năng làm việc nhất đúng. Tiêu đề phần được dán theo mặc định trong bảng Kiểu đồng bằng. Có nghĩa là bạn di chuyển xuống tiêu đề ở trên cùng của khung của UITableView cho đến khi tiêu đề phần tiếp theo đẩy nó ra khỏi con đường. Điều ngược lại xảy ra khi bạn cuộn lên. Ngược lại, bạn sẽ có được hành vi dính trên các phần cuối trang ở cuối khung của UITableView.

EDIT hiểu lầm câu hỏi ban đầu:

tôi sẽ đề nghị sử dụng một tiêu đề phần chứ không phải là tiêu đề xem bảng để có được những hành vi dính bạn đang tìm kiếm.

Bao gồm một phần trong dữ liệu của bạn không có hàng và đặt chế độ xem của tiêu đề bảng trong chế độ xem tiêu đề của phần đó.

+0

Đây không phải là tiêu đề phần, đây là tableHeaderView – KVISH

+0

OK. Hiểu sai câu hỏi. – Aaron

+0

Sửa đổi câu trả lời của tôi. – Aaron

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