[iphone] Obtén UIScrollView para desplazarte a la parte superior


Answers

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()
Question

¿Cómo hago para que un scroll UIScrollView llegue a la cima?




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.




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)
            }
        }
    }
  }
}



Para Swift 4

scrollView.setContentOffset (.zero, animado: verdadero)




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)



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.




Related