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
}