transferir - pasar fotos de iphone a pc windows 7
Obtén UIScrollView para desplazarte a la parte superior (12)
Para iOS 11 y versiones posteriores: trabaje con el nuevo conjunto de adjustedContentInset
Por ejemplo (desplazarse hacia la parte superior) :
var offset = CGPoint(x: -scrollView.contentInset.left,
y: -scrollView.contentInset.top)
if #available(iOS 11.0, *) {
offset = CGPoint(x: -scrollView.adjustedContentInset.left,
y: -scrollView.adjustedContentInset.top)
}
scrollView.setContentOffset(offset, animated: true)
Incluso si usa
prefersLargeTitles
,safe area
etc.
¿Cómo hago para que un scroll UIScrollView llegue a la cima?
ACTUALIZACIÓN PARA iOS 7
[self.scrollView setContentOffset:
CGPointMake(0, -self.scrollView.contentInset.top) animated:YES];
ORIGINAL
[self.scrollView setContentOffset:CGPointZero animated:YES];
o si desea conservar la posición de desplazamiento horizontal y simplemente restablecer la posición vertical:
[self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, 0)
animated:YES];
Aquí hay una extensión de Swift que lo hace fácil:
extension UIScrollView {
func scrollToTop() {
let desiredOffset = CGPoint(x: 0, y: -contentInset.top)
setContentOffset(desiredOffset, animated: true)
}
}
Uso:
myScrollView.scrollToTop()
Creo que tengo una respuesta que debería ser totalmente compatible con iOS 11 y versiones anteriores (para desplazamiento vertical)
Esto tiene en cuenta el nuevoContenidoContenidoajustado y también tiene en cuenta el desplazamiento adicional requerido cuando se prefiereTargosTítulosLarge en la barra de navegación, que parece requerir un desplazamiento adicional de 52px además de lo que sea el valor predeterminado
Esto fue un poco complicado porque el ajusteContentInset cambia dependiendo del estado de la barra de título (título grande frente a título pequeño), así que necesitaba verificar y ver cuál era la altura de la barra de título y no aplicar el desplazamiento de 52 px si ya estaba en el estado grande. No pude encontrar ningún otro método para verificar el estado de la barra de navegación, así que si alguien tiene una mejor opción que ver si la altura es> 44.0, me gustaría escucharla
func scrollToTop(_ scrollView: UIScrollView, animated: Bool = true) {
if #available(iOS 11.0, *) {
let expandedBar = (navigationController?.navigationBar.frame.height ?? 64.0 > 44.0)
let largeTitles = (navigationController?.navigationBar.prefersLargeTitles) ?? false
let offset: CGFloat = (largeTitles && !expandedBar) ? 52: 0
scrollView.setContentOffset(CGPoint(x: 0, y: -(scrollView.adjustedContentInset.top + offset)), animated: animated)
} else {
scrollView.setContentOffset(CGPoint(x: 0, y: -scrollView.contentInset.top), animated: animated)
}
}
Inspirado por la solución de Jakub
Desplácese hacia arriba para UITableViewController
, UICollectionViewController
o cualquier UIViewController
tenga UIScrollView
extension UIViewController {
func scrollToTop(animated: Bool) {
if let tv = self as? UITableViewController {
tv.tableView.setContentOffset(CGPoint.zero, animated: animated)
} else if let cv = self as? UICollectionViewController{
cv.collectionView?.setContentOffset(CGPoint.zero, animated: animated)
} else {
for v in view.subviews {
if let sv = v as? UIScrollView {
sv.setContentOffset(CGPoint.zero, animated: animated)
}
}
}
}
}
En iOS7 tuve problemas para obtener una vista de desplazamiento particular para ir a la parte superior, que funcionaba en iOS6, y lo usé para configurar la vista de desplazamiento para ir a la cima.
[self.myScroller scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
Intenté todos los caminos. Pero nada funcionó para mí. Finalmente, me gustó esto.
self.view .addSubview(self.scroll)
línea de código self.view .addSubview(self.scroll)
en viewDidLoad. Después de comenzar a configurar el marco para la vista de desplazamiento y los componentes añadidos para desplazar la vista.
Funcionó para mí
Asegúrese de haber agregado la línea self.view .addSubview(self.scroll)
al principio. entonces puedes agregar elementos de UI.
Para Swift 4
scrollView.setContentOffset (.zero, animado: verdadero)
Para replicar por completo el comportamiento de la barra de estado scrollToTop, no solo debemos configurar el contentOffset, sino también asegurarnos de que se muestren los scrollIndicators. De lo contrario, el usuario puede perderse rápidamente.
El único método público para lograr esto es flashScrollIndicators
. Desafortunadamente, invocarlo una vez después de configurar el contentOffset no tiene ningún efecto porque se restablece inmediatamente. Encontré que funciona al hacer el flash cada vez en scrollViewDidScroll:
// define arbitrary tag number in a global constants or in the .pch file
#define SCROLLVIEW_IS_SCROLLING_TO_TOP_TAG 19291
- (void)scrollContentToTop {
[self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, -self.scrollView.contentInset.top) animated:YES];
self.scrollView.tag = SCROLLVIEW_IS_SCROLLING_TO_TOP_TAG;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.scrollView.tag = 0;
});
}
En su UIScrollViewDelegate (o UITable / UICollectionViewDelegate) implemente esto:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.tag == SCROLLVIEW_IS_SCROLLING_TO_TOP_TAG) {
[scrollView flashScrollIndicators];
}
}
El retraso de ocultación es un poco más corto en comparación con el comportamiento de la barra de estado scrollToTop, pero todavía se ve bien.
Tenga en cuenta que estoy abusando de la etiqueta de vista para comunicar el estado "isScrollingToTop" porque necesito esto en los controladores de vista. Si usa etiquetas para otra cosa, puede reemplazar esto con un iVar o una propiedad.
Respuesta para Swift 2.0 / 3.0 / 4.0 e iOS 7+:
let desiredOffset = CGPoint(x: 0, y: -self.scrollView.contentInset.top)
self.scrollView.setContentOffset(desiredOffset, animated: true)
Swift 3.0.1 versión de la respuesta de rob mayoff :
self.scrollView.setContentOffset(
CGPoint(x: 0,y: -self.scrollView.contentInset.top),
animated: true)
Use setContentOffset:animated:
[scrollView setContentOffset:CGPointZero animated:YES];