6

Ho un UINavigationController che può mostrare i dati come UICollectionView o in UITableView. iOS 7 regola automaticamente la visualizzazione a scorrimento interna per il primo UIScrollView fondato nella gerarchia delle viste.Indicatore di scorrimento UITableView in UINavigationBar dopo la modifica di ContentEdgeInset

Quindi, UICollectionView è ok ma devo impostare contentEdgeInset per UITableView. Dopo questa linea

self.tableView.contentInset = UIEdgeInsetsMake(44.0f, 0.0f, 0.0f, 0.0f);

contenuti in UITableView sono mostrati bene, ma l'indicatore di scorrimento non si ferma al UINavigationBar, ma continuare sotto di essa.

Come posso risolvere questo e interrompere l'indicatore di scorrimento all'inizio di UINavigationBar?

enter image description here

risposta

11

è anche possibile impostare il scrollIndicatorInsets come segue:

self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(44.0f, 0.0f, 0.0f, 0.0f); 

Tra l'altro, su iOS 7, è necessario utilizzare [self.topLayoutGuide length] al posto di hard-codifica 44.0f pixel. Dalla iOS 7 Transition Guide:

Le proprietà topLayoutGuide e bottomLayoutGuide indicano la posizione dei bordi superiori o inferiori a barre in vista di un controller della vista.

+0

Perfetto! Ma '[self.topLayoutGuide length]' non funziona per me ... return 0. Why? – Fry

+2

Se lo chiami in -viewDidLoad, potrebbe restituire zero. La cosa migliore da fare sarebbe controllarlo in -viewDidLayoutSubviews e impostare i propri margini lì. –

+0

potresti anche voler impostare insiemi di contenuti anche in viewWillLayoutSubviews come segue: 'self.tableView.contentInset = UIEdgeInsetsMake (0.0f, 0.0f, 49.0f, 0.0f);' – Sourabh