Buscar..


Un ejemplo de StackView complejo dentro de Scrollview

A continuación, se muestra un ejemplo de lo que se puede hacer con las StackViews anidadas, dando al usuario la impresión de una experiencia de desplazamiento continuo utilizando elementos de alineación o elementos complejos de la interfaz de usuario.

Un ejemplo de StackView complejo dentro de Scrollview

Prevenir el diseño ambiguo.

Una pregunta frecuente sobre StackViews dentro de Scrollviews proviene de las alertas ambiguas con / heigh en el constructor de interfaces. Como se explica en esta respuesta , es necesario:

  1. Agregue en el UIScrollView una UIView (el contentScrollView);
  2. En este contentScrollView, establezca los márgenes superior, inferior, izquierdo y derecho en 0
  3. El conjunto también alinea el centro horizontalmente y verticalmente;

Desplazarse hasta el contenido dentro de StackViews anidados

El gran problema del desplazamiento es determinar el desplazamiento necesario para presentar (por ejemplo) un campo de texto dentro de un StackView dentro de ScrollView .

Si intentas obtener la posición de Textfield.frame.minY puede ser 0 , porque el marco minY solo está considerando la distancia entre el elemento y la parte superior de StackView. Así que tienes que considerar todas las demás vistas / vistas de pila.

Una buena solución para esto es:

1 - Implementar la extensión ScrollView

extension UIScrollView {

    func scrollToShowView(view: UIView){
        var offset = view.frame.minY
        var superview = view.superview
        while((superview  != nil)){
            offset += (superview?.frame.minY)!
            superview = superview?.superview
        }
        
        offset -= 100 //optional margin added on offset
        
        self.contentOffset = CGPoint.init(x: 0, y: offset)
    }

}

Esto considerará todas las vistas principales y sumará el desplazamiento necesario para que la vista de desplazamiento presente la vista necesaria en la pantalla (por ejemplo, un campo de texto que no pueda quedar detrás del teclado del usuario)

Ejemplo de uso:

func textViewDidBeginEditing(_ textView: UITextView) {
    self.contentScrollView.scrollToShowView(view: textView)
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow