iPhone: nasconde la barra di ricerca UITableView per impostazione predefinita


85

Ho utilizzato Interface Builder per creare una visualizzazione tabella, a cui ho aggiunto la barra di ricerca della libreria e il controller di visualizzazione della ricerca per aggiungere funzionalità di ricerca. Tuttavia, IB lo imposta in modo che la barra sia visibile nella parte superiore dello schermo quando la vista viene visualizzata per la prima volta.

Mi piacerebbe sapere come nascondere la barra di ricerca per impostazione predefinita, ma comunque scorrevole con la visualizzazione tabella (vedi l'applicazione Mail di Apple per un esempio). Ho provato a chiamare scrollRectToVisible:animated:in viewDidLoadper far scorrere la visualizzazione della tabella verso il basso, ma senza alcun risultato. Qual è il modo preferito per nascondere la barra di ricerca per impostazione predefinita?

Risposte:


116

Innanzitutto assicurati di aggiungere UISearchBar a tableHeaderView di UITableView in modo che venga fatto scorrere con il contenuto della tabella e non venga fissato nella parte superiore della visualizzazione.

La barra di ricerca non viene conteggiata come una riga nella visualizzazione tabella, quindi se scorri la parte superiore della visualizzazione tabella fino alla prima riga, "nasconde" la barra di ricerca:

[yourTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

o in Swift:

yourTableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)

Assicurati di non far scorrere la tableview prima che contenga dati ( scrollToRowAtIndexPathsolleverà un'eccezione se il dato indexPath non punta a una riga valida (cioè se la tableview è vuota)).


12
In realtà, sto riscontrando un problema in cui la vista tabella non scorre se non ci sono abbastanza righe per riempire lo schermo: in una tabella con una o due righe, questo codice non fa nulla. È questo il comportamento previsto? Posso aggirarlo in qualche modo?
Tim

18
Ho trovato un modo: invece di scorrere fino a un percorso di indice, modifica l'offset del contenuto della visualizzazione a scorrimento della tabella in un CGRect a 0.0, 44.0
Tim

107
Tim, questa è la strada da percorrere! Ho usato self.tableView.contentOffset = CGPointMake (0, self.searchDisplayController.searchBar.frame.size.height);
Joe D'Andrea

1
A proposito - quando stavo inserendo questo codice dopo una chiamata a [tableView reloadData] che faceva passare la mia tabella da 2 righe a un numero sufficiente di righe per consentire lo scorrimento normale, ho scoperto che l'utilizzo del metodo contentOffset causava una visualizzazione e un occultamento a scatti della ricerca box durante l'utilizzo del metodo scrollToRowAtIndexPath non ha avuto la stessa scocciatura.
Chris R

1
Questo è l'unico modo definitivo che funziona in QUALSIASI circostanza. L'impostazione contentOffsetcon qualsiasi valore si interromperà se si utilizza un layout del controller di visualizzazione complesso. Non lo consiglio.
eonil

45

Non aggiungere UISearchBar come sottoview di UITableView, non è necessario.

UITableView ha una proprietà tableHeaderView che è perfetta per questo:

- (void) viewDidLoad {
    [super viewDidLoad]; 
    self.searchBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
    self.searchBar.showsCancelButton = YES;    
    self.searchBar.delegate = self;
    self.tableView.tableHeaderView = self.searchBar;     
}

Se non vuoi vederlo per impostazione predefinita:

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.tableView setContentOffset:CGPointMake(0, 44)];
}

Ottengo anche il pulsante Annulla per nasconderlo di nuovo ... (e rimuovere la tastiera)

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    [self.tableView setContentOffset:CGPointMake(0, 44) animated:YES];
    [self.searchBar resignFirstResponder];
}

Per me, questa è stata l'unica soluzione che ha prodotto un'implementazione UISearchBar nascosta che sembrava in linea con l'HIG. Le altre soluzioni in cui è "bloccato" nella parte superiore della visualizzazione del tavolo sembrano innaturali.
kurtzmarc

1
Questa soluzione ha funzionato al meglio. Questa dovrebbe essere la risposta secondo me.
darwindeeds

Questa soluzione è carina (+1). Tuttavia, tableView non nasconde correttamente la barra di ricerca in alcuni casi (nel mio caso: quando il controller tableview viene respinto da un altro controller di visualizzazione). C'è una domanda su questo problema: stackoverflow.com/questions/15222186/… Penso che la risposta fornita a questa domanda non sia abbastanza buona. @bandejapaisa, hai qualche idea?
Brian

3
Questo ha funzionato bene per me, anche se invece di codificare 44 in tutto, suggerisco di utilizzare self.tableView.tableHeaderView.frame.size.height in viewWillAppear per consentire le modifiche che Apple potrebbe apportare in futuro all'altezza della barra di ricerca.
John Stephen

mettendo questo in viewWillAppearè una cattiva idea, perché sarà eseguito ogni volta che si torna navigare alla visualizzazione. Ciò significa che la vista del tavolo si abbasserà lentamente. Insetto irritante!
Sirene

25

Il contentOffset è stato notato nei commenti di Tim e Joe D'Andrea, ma questo è un po 'ampliato aggiungendo un'animazione per nascondere la barra di ricerca. Ho notato che è un po 'inaspettato che la barra di ricerca scompaia.

Un piccolo aggiornamento per coloro che vogliono scegliere come target iOS 4.0 e versioni successive, prova questo:

[UIView animateWithDuration:0.4 animations:^{
    self.tableView.contentOffset = CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height);
 } completion:nil];

Risposta precedente:

[UIView beginAnimations:@"hidesearchbar" context:nil];
[UIView setAnimationDuration:0.4];
[UIView setAnimationBeginsFromCurrentState:YES];

self.tableView.contentOffset = CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height);

[UIView commitAnimations];


9
Ho scoperto che l'animazione è la chiave di questa soluzione. Il tentativo di impostare l'offset del contenuto senza l'animazione sembrerà non fare nulla. Invece di utilizzare i metodi di animazione (o blocchi) in questo esempio, tuttavia, trovo che la semplice chiamata [self.tableView setContentOffset: CGPointMake (0,44) animated: TRUE] funzioni abbastanza bene.
quickthyme

Sembra non funzionare affatto senza l'animazione. @quickthyme ha fatto la stessa osservazione.
Thilo

5
Ho avuto successo con questo senza bisogno delle animazioni se lo implementi viewDidAppear:invece di viewDidLoad.
wbyoung

8

Ci sono molte risposte a questa soluzione, ma nessuna ha funzionato molto bene per me.

Funziona perfettamente. Nessuna animazione e viene eseguita-viewDidLoad

 - (void)viewDidLoad {
     [super viewDidLoad];
     self.tableView.contentOffset = CGPointMake(0,  self.searchBar.frame.size.height - self.tableView.contentOffset.y);
 }

Nota:

Il codice presuppone che tu abbia il searchBar @propertyche è collegato alla barra di ricerca. In caso contrario, puoi usare self.searchDisplayController.searchBarinvece


questo è l'unico che ha funzionato per me! , ma lo fa solo un viewdidload ... quindi la prima volta è nascosto, ma poi non è più nascosto mentre l'app è in esecuzione. E ho provato a metterlo in viewwillappear e viewdidappear ma funziona male. Grazie!
fguespe

@fguespe che è strano .. Il viewDidLoad dovrebbe essere chiamato ogni volta che viene creata un'istanza della vista. Non mi è mai successo che UISearchBar fosse visibile dopo essere tornato da un'altra vista.
Matej

Sto usando un'applicazione a schede. Forse quello?
fguespe

@fguespe vedo che potrebbe essere il problema hmm. Sfortunatamente non sono sicuro di come risolveresti che se -viewWillAppearnon funziona .. Viene chiamato quando il controller della scheda passa alla visualizzazione?
Matej

viewwillappear e viewdidappear sono chiamati, ma ho provato con entrambi e la vista è come offset errato. Non restituisce il risultato atteso. Voglio dire, qualcosa lo fa, ma lo fa male.
fguespe

7

Per Swift 3+

L'ho fatto:

Dichiara questo var:

    var searchController = UISearchController()

E nel viewDidLoad()metodo

    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = true
    searchController.searchBar.placeholder = NSLocalizedString("Search", comment: "")
    definesPresentationContext = true
    tableView.tableHeaderView = searchController.searchBar

    tableView.contentOffset = CGPoint(x: 0, y: searchController.searchBar.frame.size.height)

5

Il mio obiettivo era nascondere la barra di ricerca aggiunta a tableHeaderView del semplice stile TableView nello storyboard quando viene caricato il controller di visualizzazione e mostrare la barra quando l'utente scorre verso il basso nella parte superiore di UITableView. Quindi, sto usando Swift e ha aggiunto l'estensione:

extension UITableView {
    func hideSearchBar() {
        if let bar = self.tableHeaderView as? UISearchBar {
            let height = CGRectGetHeight(bar.frame)
            let offset = self.contentOffset.y
            if offset < height {
                self.contentOffset = CGPointMake(0, height)
            }
        }
    }
}

in viewDidLoad () chiama semplicemente:

self.tableView.hideSearchBar()

5

Tutte le soluzioni esistenti non funzionano per me su iOS 8 quando non ci sono abbastanza righe per riempire il tableView poiché iOS regolerà automaticamente l'inset in questa situazione. (Le risposte esistenti sono buone quando ci sono abbastanza righe però)

Dopo aver sprecato circa 6 ore su questo problema, ho finalmente ottenuto questa soluzione.

In breve, è necessario inserire celle vuote in tableView se non ci sono abbastanza celle, quindi la dimensione del contenuto di tableView è abbastanza grande che iOS non aggiusterà l'inserto per te.

Ecco come l'ho fatto in Swift:

1.) dichiarare una variabile minimumCellNumcome proprietà di una classe

var minimumCellNum: Int?

2.) calcolare minimumCellNume insieme tableView.contentOffsetaviewWillAppear

let screenHeight = Int(UIScreen.mainScreen().bounds.height)

// 101 = Height of Status Bar(20) + Height of Navigation Bar(44) + Height of Tab Bar(49)
// you may need to subtract the height of other custom views from the screenHeight. For example, the height of your section headers.
self.minimumCellNum = (screenHeight - 103 - heightOfOtherCustomView) / heightOfYourCell
self.tableView.contentOffset = CGPointMake(0, 44)

3.) in tableView(tableView: UITableView, numberOfRowsInSection section: Int))

let numOfYourRows = YOUR LOGIC
if numOfYourRows > minimumCellNum {
    return numOfYourRows
} else {
    return minimumCellNum!
}

4.) Registra una cella vuota, il cui selectionattributo è None, nello storyboard e intableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)

if indexPath.row < numOfYourRows {
    return YOUR CUSTOM CELL
} else {
    let cell = tableView.dequeueReusableCellWithIdentifier("EmptyCell", forIndexPath: indexPath) as! UITableViewCell
    return cell
}

5.) in tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

if tableView == self.tableView {
    if numOfYourRows < (indexPath.row + 1) {
        return
    }
    YOUR LOGIC OF SELECTING A CELL
}

Questa non è una soluzione perfetta, ma è l'unica soluzione alternativa che funziona davvero per me su iOS 8. Mi piacerebbe sapere se esiste una soluzione più ordinata.


Ho dovuto farlo per iOS 11. L'impostazione di contentOffset da sola ha funzionato per iOS 9/10 per 0 o più celle, e ha funzionato anche su iOS 11 per 8+ celle. Qualcosa di meno richiedeva questa soluzione. C'è un motivo per cui?
Tony

Penso che il primo paragrafo di questo post spieghi perché.
Brian

Ho capito il primo paragrafo, ma era comunque strano che fosse "rotto" solo su iOS 11 per me. Mi sarei aspettato un comportamento simile per iOS 9, 10 e 11 quando il numero di celle è lo stesso (meno che sufficiente). Grazie ancora e scusa per aver sollevato un vecchio post!
Tony

4

Nessuno dei precedenti ha funzionato per me, quindi nel caso in cui qualcuno avesse lo stesso problema.

Ho searchBarimpostato come tableHeaderViewsu una tabella raggruppata su iOS7. In viewDidLoaddevo tableView.contentOffset = CGPointMake(0, 44);tenerlo searchBarinizialmente "nascosto". Quando l'utente scorre verso il basso searchBarviene visualizzato

Obiettivo: nascondere la ricerca Barra sul pulsante Annulla toccare

Nel searchBarCancelButtonClicked(searchBar: UISearchBar!)

Questo non ha funzionato: [yourTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; tableView stava scorrendo troppo verso l'alto, con il risultato che la riga 0 andava dietro la ToolBar.

Questo non ha funzionato: tableView.ContentOffset = CGPointMake(0, 44) - non succede nulla

Questo non ha funzionato: tableView.ContentOffset = CGPointMake(0, searchBar.frame.size.height) - non succede nulla

Questo non ha funzionato: di tableView.setContentOffset(CGPointMake(0, 44), animated: true); nuovo tableView stava scorrendo troppo verso l'alto, con il risultato che la riga 0 andava dietro la ToolBar.

Questo ha funzionato parzialmente: tableView.setContentOffset(CGPointMake(0, 0) ma titleForHeaderInSectionstava andando dietro toolBar

QUESTO HA FUNZIONATO: tableView.setContentOffset(CGPointMake(0, -20)

Non sembra logico, ma solo -20 lo ha spostato fino alla posizione corretta


Non dovresti davvero codificare i tuoi punti, perché non li usi CGRectGetHeight(searchBar.bounds)?
Zorayr

Immagino che tu debba farlo in viewDidLoad () / init () dove non è stato impostato alcun frame per ottenere l'altezza della barra di ricerca. Forse dovresti provare con viewDidLayoutSubviews ()
Kaushil Ruparelia

Se tableView non ha terminato il caricamento, nessuna delle ContentOffsetsoluzioni funzionerà
Maor

4

L'offset del contenuto è la strada da percorrere, ma non funziona il 100% delle volte.

Non funziona se si sta impostando estimatedRowHeightun numero fisso. Non so ancora come funziona. Ho creato un progetto che mostra i problemi e ho creato un radar con Apple.

Dai un'occhiata al progetto se vuoi un esempio rapido di come impostare tutto.


1
Grazie! Questo era quello che stavo cercando. Devi salire fino in fondo.
user2387149

3

Nota che la risposta accettata andrà in crash se non ci sono dati nella tableview. E aggiungerlo a viewDidLoad potrebbe non funzionare in determinate circostanze.

[yourTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; // crashes if no rows/data

Pertanto, aggiungi invece questa riga di codice:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    [yourTableView setContentOffset:CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height)];
}

2

Onestamente, nessuna delle risposte ha davvero risolto il problema (per me). Se la visualizzazione della tabella non ha righe OPPURE l'altezza delle righe è diversa, queste risposte non sono sufficienti.

L'unica cosa che funziona:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.tableView.contentOffset = (CGPoint){.y =  self.tableView.contentOffset.y + self.searchController.searchBar.frame.size.height};
}

Buona soluzione per il problema dell'offset. Funziona per me quando si utilizza un UINavigationController.
Andreas Kraft

1
La soluzione non funziona quando il numero di righe non copre l'intero schermo: sapresti una soluzione alternativa per questo?
Zorayr

Non sono sicuro di averlo capito completamente. Questo funziona per me quando ho solo poche righe nella tabella. Comunque io uso il seguente: self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];.
p0lAris

2

Il scrollToRowAtIndexPathmetodo causa un arresto anomalo se nella tabella sono presenti zero righe.

UITableView è solo una visualizzazione a scorrimento, quindi puoi semplicemente modificare l'offset del contenuto.

Questo controlla che tu abbia qualcosa come tableHeaderView e supponendo che tu faccia degli scroll per nasconderlo

    if let searchHeight = tableView.tableHeaderView?.frame.height {
        tableView.setContentOffset(CGPoint.init(x: 0, y:searchHeight ), animated: false)
    }

1

Trovo che l'app "Note" non sia in grado di cercare elementi quando il tableView è vuoto. Quindi penso che all'inizio stia solo usando -(void)addSubview:(UIView *)viewper aggiungere una tabella vuota. Quando aggiungi un elemento al suo array di origine dati, verrà eseguito un altro pezzo di codice per caricare tableView.

Quindi la mia soluzione è:

if([self.arrayList count] > 0)
{
     [self.tableView reloadData];     //use jdandrea's code to scroll view when cell==nil in cellForRowAtIndexPath
     self.tableView.scrollEnabled = YES;
}
else
{
     tableBlank = [[UITableView alloc]initWithFrame:CGRectMake(0,0,320,416) style:UITableViewStylePlain] autorelease];
     tableBlank.delegate = self;
     tableBlank.dataSource = self;
     [self.view addSubview:tableBlank];
}

Spero che sia di aiuto :-)


1

Cambia i limiti del tableView, questo può essere fatto all'interno viewDidLoade non devi preoccuparti se la tabella è vuota o meno (per evitare l'eccezione).

CGRect newBounds = self.tableView.bounds;
newBounds.origin.y = newBounds.origin.y + self.searchBar.bounds.size.height;
self.tableView.bounds = newBounds;

Una volta che l'utente ha fatto scorrere la tabella, la barra di ricerca apparirà e si comporterà normalmente


1

Le altre risposte a questa domanda non hanno funzionato affatto per me, hanno avuto un comportamento strano quando il tableView aveva 0 righe o ha incasinato la posizione di scorrimento quando si va avanti e indietro tra gli elementi pubblicitari principali e nidificati. Questo ha funzionato per me (l'obiettivo era nascondere la UISearchBar durante il caricamento):

public override func viewWillAppear(animated: Bool) {        
    if self.tableView.contentOffset.y == 0 {
        self.tableView.contentOffset = CGPoint(x: 0.0, y: self.searchBar.frame.size.height) 
    }
}

Spiegazione
Ogni volta tableViewche apparirà, questo codice verifica se l'UISearchBar è visibile (ovvero la yposizione di contentOffset, alias posizione di scorrimento, è 0). Se lo è, scorre semplicemente verso il basso l'altezza della searchBar. Se la searchBar non è visibile (pensa a un elenco più ampio di elementi in tableView), non proverà a scorrere il tableView, poiché ciò rovinerebbe il posizionamento quando torni da un elemento pubblicitario nidificato.

Nota a
margine Suggerirei di inserire questo codice in un metodo separato per garantire una singola responsabilità e darti la possibilità di chiamarlo in qualsiasi momento nel tuo codice.


1

Se la tua tabella avrà sempre almeno una riga, scorri fino alla prima riga della tabella e la barra di ricerca verrà nascosta automaticamente.

let firstIndexPath = NSIndexPath(forRow: 0, inSection: 0)

self.tableView.selectRowAtIndexPath (firstIndexPath, animated: false, scrollPosition: .Top)

Se metti il ​​codice sopra su viewDidLoad , genererà un errore perché tableView non è ancora stato caricato, quindi devi metterlo in viewDidAppear perché a questo punto tableView è già stato caricato.

Se lo metti su viewDidAppear , ogni volta che apri tableView scorrerà verso l'alto.

Forse non vuoi questo comportamento se il tableView rimane aperto, come quando è un UITabBar View Controller o quando fai un segue e poi torni. Se vuoi solo che scorra verso l'alto durante il caricamento iniziale, puoi creare una variabile per verificare se si tratta di un caricamento iniziale in modo che scorra verso l'alto solo una volta.

Definisci prima una variabile chiamata isInitialLoad nella classe del controller di visualizzazione e impostala uguale a "true":

var isInitialLoad = true

Quindi controlla se isInitialLoad è vero su viewDidAppear e se è vero, scorri fino all'inizio e imposta la variabile isInitialLoad su false:

if isInitialLoad {
            let firstIndexPath = NSIndexPath(forRow: 0, inSection: 0)
            self.tableView.selectRowAtIndexPath(firstIndexPath, animated: false, scrollPosition: .Top)

            isInitialLoad = false
        }

1

Di seguito il codice funziona per me

self.tableView.contentOffset = CGPointMake(0.0, 44.0);

1

Ho provato a impostare l'offset del contenuto e scrollToIndexpath ma niente ha funzionato in modo soddisfacente. Ho rimosso l'impostazione di tableHeaderView come searchBar da viewDidLoad e l'ho impostata in scrollview delegate come sotto

override func scrollViewWillBeginDragging(scrollView: UIScrollView) {
    if scrollView.contentOffset.y < 0 && tableView.tableHeaderView == nil {
        tableView.tableHeaderView = searchController.searchBar
        tableView.setContentOffset(CGPointMake(0, scrollView.contentOffset.y + searchController.searchBar.frame.size.height), animated: false)
    }
}

Ha funzionato a meraviglia. L'impostazione dell'offset del contenuto è per uno scorrimento fluido


0

Non dimenticare di prendere in considerazione la barra di stato e la barra di navigazione . Il mio controller di visualizzazione tabella è incorporato in un controller di navigazione, in viewDidAppear:

tableView.contentOffset = CGPointMake(0, -20) // -20 = 44 (search bar height) - 20 (status bar height) - 44 (navigation bar height)

ha funzionato per me.


0

Per Swift:

Basta creare l'offset y del contenuto della visualizzazione tabella, che dovrebbe essere come l'altezza della barra di ricerca.

self.tableView.contentOffset = CGPointMake(0, self.searchController.searchBar.frame.size.height)

0

Swift 3

funziona anche con tavolo vuoto!

Nel mio ambiente carico celle personalizzate tramite file xib e rowHeight viene impostato automaticamente.

    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        self.tableView.contentOffset = CGPoint(x: 0, y: self.tableView.contentOffset.y + self.searchController.searchBar.bounds.height)
}

0

Ho avuto un problema simile. E l'unico modo che ho trovato per risolvere questo problema è stato quello di utilizzare l'osservatore del valore chiave sulla proprietà contentOffset di UITableView.

Dopo un po 'di debug, mi sono reso conto che il problema appare solo se la dimensione del contenuto della vista tabella è inferiore a quella della tabella. Avvio KVO quando è visualizzato ViewWillAppear. E la spedizione interrompe KVO 0,3 secondi dopo la visualizzazione della vista. Ogni volta che contentOffset diventa 0.0, KVO reagisce e imposta contentOffset sull'altezza della barra di ricerca. Interrompo KVO asincrono dopo 0,3 secondi perché il layout di visualizzazione ripristinerà contentOffset anche dopo la visualizzazione della visualizzazione.

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
  [self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
}

-(void)viewDidAppear:(BOOL)animated{
   __weak typeof (self) weakSelf = self;
   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [weakSelf.tableView removeObserver:self forKeyPath:@"contentOffset"];});
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if ([keyPath isEqualToString:@"contentOffset"] && self.tableView.contentOffset.y == 0.0) {
       self.tableView.contentOffset = CGPointMake(0, CGRectGetHeight(self.tableView.tableHeaderView.frame));
    }
}

-(void)dealloc {
    [self.tableView removeObserver:self forKeyPath:@"contentOffset"];
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.