2014-05-05 26 views
5

UITableView'ın üst kısmında bir UISearchBar uyguluyorum.UISearchBis to UISearchDisplayController geçişi 20px kapalıdır

ViewDidLoad'ımda self.edgesForExtendedLayout = UIRectEdgeNone'u ayarlıyorum.

UISearchBar'ımı nasıl ekliyorum. Sadece benim UITableView başlığına bir UISearchBar eklenmesi ve ofset içeriğini ayarlamak ediyorum:

// Table View 
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.screenWidth, self.screenHeight)]; 

self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

// Customize table appearance 
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 
self.tableView.backgroundColor = [UIColor tableBackgroundColor]; 

// Define the table's datasource 
self.tableView.dataSource = self; 
self.tableView.delegate = self; 

[self.view addSubview:self.tableView]; 


// Add a search bar to the header 
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.screenWidth, 44)]; 
self.searchBar.tintColor = [UIColor primaryBrandedColor]; 
self.searchBar.placeholder = NSLocalizedString(@"Search", "Search placeholder"); 
self.searchBar.backgroundImage = [UIImage imageNamed:@"searchBarBackground"]; 
[self.searchBar setBackgroundImage:[UIImage imageNamed:@"searchBarBackground"] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault]; 
self.searchBar.barTintColor = [UIColor clearColor]; 
self.searchBar.delegate = self; 

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setFont:[UIFont fontWithName:@"Whitney-Light" size:15]]; 

//Setup search display controller 
self.searchController = [[HUMSearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; 
self.searchController.delegate = self; 
self.searchController.searchResultsDataSource = self; 
self.searchController.searchResultsDelegate = self; 
self.searchController.searchResultsTableView.separatorStyle = UITableViewCellSeparatorStyleNone; 

// Add the searchBar and offset the table view so it's hidden by default. 
self.tableView.tableHeaderView = self.searchBar; 
self.tableView.contentOffset = CGPointMake(0.0, self.searchBar.frame.size.height); 

Bu şey gibi görünmüyor Bunda normal olmayan, ancak orijinal tableview bir 20px boşluk var SearchDisplayController görüntülenir. Bu örnekte, neler olup bittiğini daha açık hale getirmek için NavigationBar'ı gizlemek için SearchDisplayController'ı alt sınıflara ayırdım.

Gap

geçişin bir video yakalama: http://cl.ly/0y3L0Z1R1I0c/20pixels.mov

denedim şeyler:

  1. değiştir 20px yukarı taşımak için searchDisplayControllerWillBeginSearch benim UITableView çerçevesi. Bu geçişi kırar. searchDisplayControllerWillBegin üzerinde UITableView http://cl.ly/033q0L3G0p1T/origin.mov
  2. değiştirme kaydırma uzaklıkları. Benzer şekilde, bu geçişi kırar.
  3. UISearchBar'ı el ile canlandırmaya çalıştım ancak bunu da kullanamadım.

Herhangi bir fikir? Birkaç deneme yanılma seans sonra

cevap

3

nihayet istenilen davranışı elde etti. Benim durumumda arama çubuğu tıklandığında not: Gezinme çubuğunun kaldırılmasını istiyorum. Aşağıdaki çözüm, 20px boşluk sorununu giderir.

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    ...   
    self.edgesForExtendedLayout = UIRectEdgeTop; 
    self.searchBar.clipsToBounds = YES; 
    self.navigationController.navigationBar.translucent = YES; 
} 

viewWillDisappear üzerinde saydam özelliği, aksi görünüşüdür içeriği ile birlikte itilir kalır segue görünüşüdür kontrol gezinme çubuğunda, NO ayarlanmalıdır.

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self resignFirstResponder]; 
    self.navigationController.navigationBar.translucent = NO; 
} 

Bu yardımcı olur umarım.

+1

EVET! Bu beni çok rahatsız ediyor! Teşekkürler! – DonnaLea

+2

gez çubuğu saydam yapmadan aynı çözümü için, kullanımı aşağıdaki gibidir: 'self.edgesForExtendedLayout = UIRectEdgeAll;' 'self.automaticallyAdjustsScrollViewInsets = HAYIR;' 'self.extendedLayoutIncludesOpaqueBars = EVET;' – BreadicalMD

+0

BreadicalMD Brilliant! beni kurtardın. Teşekkürler. –

0

bana waves at Aaron

\ Bu kafamı duvara vurarak bir sürü bir cehennem sonra bizim için çalışan sarılır budur. Nav çubuğunu arama çubuğunda gösterdiğimizi unutmayın.

Not: Bu, büyük olasılıkla Reveal kullanarak çözdüğüm bazı şeylere göre görüntülü dalış yapmaya başladığından, iOS 8'de bozulmaya başlayacaktır, böylece herhangi birinin daha az kırılgan bir çözümü varsa, bunu duymak isterim. Bunun yerine bir tableHeaderView olarak doğrudan UISearchBar atama

- (UIView *)wrapperViewForTableView:(UITableView *)tableView 
{ 
    //This was discovered via Reveal. May change for iOS 8. 
    return tableView.subviews[1]; 
} 

- (CGFloat)statusBarHeight 
{ 
    return CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]); 
} 

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller 
{ 
    //Don't animate - this bit works without animation. 
    UIView *wrapperView = [self wrapperViewForTableView:self.tableView]; 
    CGRect frame = wrapperView.frame; 
    frame.origin.y -= [self statusBarHeight]; 
    frame.size.height += [self statusBarHeight]; 

    wrapperView.frame = frame; 
} 

- (void)searchDisplayControllerWillEndSearch:(HUMSearchDisplayController *)controller 
{ 
    //Animate this so it goes with the dismissal. 
    [UIView animateWithDuration:0.25 animations:^{ 
     UIView *wrapperView = [self wrapperViewForTableView:self.tableView]; 
     CGRect frame = wrapperView.frame; 
     frame.origin.y += [self statusBarHeight]; 
     frame.size.height -= [self statusBarHeight]; 
     wrapperView.frame = frame; 
    }]; 
} 
0

, UISearchBar aynı boyutta boş bir UIView oluşturmak ve tableHeaderView olarak atamak Bu görüşe bir subview olarak UISearchBar ekleyin.

Bu, UISearchBar düzenlemeye başladığında UITableView'un aşağı itilmesini engeller.