2012-12-24 28 views
10

Tôi đã triển khai thanh tìm kiếm và bộ điều khiển hiển thị tìm kiếm ở đầu chế độ xem bảng của mình.Ẩn UISearchBar cho đến khi người dùng cuộn?

Khi chế độ xem tải thanh tìm kiếm và phạm vi tương đối luôn hiển thị.

Có cách nào đơn giản để ẩn nó cho đến khi người dùng cuộn xuống, giống như nó xảy ra trong ứng dụng Nhạc không?

Trả lời

17

Bạn cần phải thêm thanh tìm kiếm như một tiêu đề của xem bảng và sau đó thiết lập các contentoffset tài sản của xem bảng trong viewDidLoad như,

[self.tableView setContentOffset:CGPointMake(0,44) animated:YES];//or (0, 88) depends on the height of it 

Đối với bộ điều khiển hiển thị tìm kiếm, bạn có thể thử này là tốt,

[self.searchDisplayController setActive:NO animated:YES]; 
+1

thiết lập các nội dung bù đắp làm việc tốt, cảm ơn! – kain

+3

Giải pháp không ẩn thanh tìm kiếm khi tất cả các hàng trong bảng vừa với màn hình. Bất kỳ giải pháp đã biết nào cho loại kịch bản này? – Zorayr

+0

@Zorayr: Bạn đã tìm thấy giải pháp làm việc cho Bảng nơi các ô phù hợp trong toàn bộ màn hình? Có cùng một vấn đề. –

11

phương pháp khác mà không hardcode

[self.tableView setContentOffset:CGPointMake(0.0, self.tableView.tableHeaderView.frame.size.height) animated:YES]; 
+0

Điều này hoạt động hoàn hảo. Công việc tuyệt vời codercat! –

0

cho iOS 7 và sử dụng UINavigationController

[self.tableView setContentOffset:CGPointMake(0, self.searchBar.height + self.navigationController.navigationBar.height)]; 
0

Cách tốt nhất tôi đã làm tableview tải lại trong

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:YES];  
    [self performSelector:@selector(reload:) withObject:nil afterDelay:0.0]; 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
} 

- (void)reload:(__unused id)sender { 
     [self.searchDisplayController setActive:YES]; 
     [self.tableView reloadData]; 
     [self.refreshControl endRefreshing]; 
    } else { 
     [self.refreshControl endRefreshing]; 
     [[[UIAlertView alloc]initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show]; 
    } 
} 

Cảm ơn

7

Sau một vài giờ tóc kéo, một cái gì đó mà làm việc

  • trên iOS 9
  • không phụ thuộc vào số lượng hàng trong bảng
  • với hàng chiều cao biến

    Xét thanh tìm kiếm là tableView.tableHeaderView

    @interface MyTableViewController() 
    
    @property (nonatomic, assign) BOOL firstLayout; 
    
    @end 
    
    - (void) viewDidLoad { 
    [super viewDidLoad]; 
    
    
    self.firstLayout = YES; 
    //your code 
    
    } 
    
    -(void)viewDidLayoutSubviews{ 
    
    [super viewDidLayoutSubviews]; 
    
    if(self.firstLayout){ 
    CGPoint offset = CGPointMake(0, self.tableView.tableHeaderView.frame.size.height - self.tableView.contentInset.top); 
    [self.tableView setContentOffset:offset]; 
    
        self.firstLayout = NO; 
    
    } 
    
    } 
    
+0

+1 lớn cho tính toàn diện. – Jake

0

này hoạt động tốt trên iOS9 +

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.tableView.contentOffset = CGPointMake(0, -20); 
    }); 
} 
Các vấn đề liên quan