ios objective-c uitableview uiscrollview pull-to-refresh

ios - Establecer la inserción de contenido de UITableView de forma permanente



objective-c uiscrollview (6)

En mi aplicación tengo un UISearchBar en UINavigationBar por lo que siempre está visible para el usuario. En ese caso, tuve que configurar contentInset con contentInset adicionales para que UIScrollView se desplazara por UISearchBar (exactamente como en Contacts.app) . Y no habría ningún problema con los UITableView estáticos, pero en mi caso tengo que volver a cargar sus contenidos, cambiar a UISearchDisplayController etc. Entonces cuando llamo:

[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)];

Todo funciona hasta que, por ejemplo, tire para actualizar ... (para esto uso SSPullToRefresh ).

Entonces mi pregunta es: ¿cómo puedo configurar contentInset permanentemente para que no tenga que preocuparme de que haya cambios en los datos dentro de UITableView ?


Agregue en numberOfRowsInSection su código [self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)]; . Así que configurará su contentInset siempre que recargue datos en su tabla


Así es como se puede solucionar fácilmente a través de Storyboard (iOS 11 y Xcode 9.1):

Seleccione Vista de tabla> Inspector de tamaño> Incrustos de contenido: Nunca


Después de una hora de pruebas, la única forma de que funcione al 100% es esta:

-(void)hideSearchBar { if([self.tableSearchBar.text length]<=0 && !self.tableSearchBar.isFirstResponder) { self.tableView.contentOffset = CGPointMake(0, self.tableSearchBar.bounds.size.height); self.edgesForExtendedLayout = UIRectEdgeBottom; } } -(void)viewDidLayoutSubviews { [self hideSearchBar]; }

con este enfoque siempre puede ocultar la barra de búsqueda si está vacía


En Swift:

override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() self.tableView.contentInset = UIEdgeInsets(top: 108, left: 0, bottom: 0, right: 0) }


Probablemente fue algún tipo de error mía porque me metí con autolagas y guiones gráficos, pero encontré una respuesta.

Tienes que ocuparte de este pequeño individuo en View Attribute Attribute Inspector

Debe estar desmarcado para que el conjunto de contentInset predeterminado no se configure después de cualquier cambio. Después de eso, solo está agregando un trazador a viewDidLoad :

[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)]; // 108 is only example

iOS 11, actualización Xcode 9

Parece que la solución anterior ya no es la correcta si se trata de iOS 11 y Xcode 9 . automaticallyAdjustsScrollViewInsets ha quedado en desuso y en este momento para lograr un efecto similar tienes que ir a Size Inspector donde puedes encontrar esto:
Además, puede lograr lo mismo en el código:

if #available(iOS 11.0, *) { scrollView.contentInsetAdjustmentBehavior = .never } else { automaticallyAdjustsScrollViewInsets = false }


automaticallyAdjustsScrollViewInsets está en desuso en iOS11 (y la solución aceptada ya no funciona). utilizar:

if #available(iOS 11.0, *) { scrollView.contentInsetAdjustmentBehavior = .never } else { automaticallyAdjustsScrollViewInsets = false }