Sobes.tech
Middle

Wie ändern sich die Höhe und Breite der Elemente der Benutzeroberfläche beim Scrollen auf iOS?

sobes.tech KI

Antwort von AI

Bei einer Standardimplementierung bleiben die Höhe und Breite der UIView-Elemente beim Scrollen innerhalb von UIScrollView oder dessen Unteransichten (UITableView, UICollectionView) unverändert.

Die Position der Elemente (Wert der Eigenschaft frame.origin) ändert sich relativ zu den bounds des Scroll-Views. Die Eigenschaft bounds des Scroll-Views verschiebt sich beim Scrollen, aber seine Größe (bounds.size) bleibt konstant (gleich der Größe von frame.size).

Die Größe des Inhalts, der gescrollt werden kann, wird durch die Eigenschaft contentSize des Scroll-Views bestimmt. Elemente innerhalb von contentSize sind beim Scrollen sichtbar.

Änderungen der Elementgröße beim Scrollen (Parallax- oder Kompressions-/Erweiterungseffekt) erfolgen nicht automatisch und erfordern zusätzliche Logik:

  1. Implementierung in UIScrollViewDelegate: Überwachung der Änderung von contentOffset in der Methode scrollViewDidScroll(_:) und manuelle Änderung von frame oder bounds des betreffenden Elements.

    // Beispiel für Höhenänderung eines Elements beim Scrollen
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let yOffset = scrollView.contentOffset.y
        let initialHeight: CGFloat = 200
        let maxHeight: CGFloat = 300
    
        // Beispiel für Kompression beim Herunterscrollen, Erweiterung beim Hochscrollen
        let newHeight = max(0, min(maxHeight, initialHeight - yOffset))
        
        someView.frame.size.height = newHeight
        // Positionsbehandlung, wenn Anker nicht oben ist
    }
    
  2. Verwendung von UIVisualEffectView: Für Unschärfe- oder Vibrations-Effekte, die sich beim Scrollen je nach Inhalt darunter ändern können.

  3. Benutzerdefinierte Layouts: In UICollectionView kann ein benutzerdefiniertes UICollectionViewLayout erstellt werden, um Transformationen der Zellen beim Scrollen zu steuern.

  4. Animationen: Verwendung von UIViewPropertyAnimator oder anderen Animationsmechanismen, die beim Scroll-Event gestartet werden.

Das grundlegende Verhalten ist also eine unveränderte Größe. Jegliche Größenänderungen sind das Ergebnis einer spezifischen Implementierung.