Sobes.tech
Middle

Kaip keičiasi vartotojo sąsajos elementų aukštis ir plotis slenkant iOS?

sobes.tech AI

Atsakymas iš AI

Standartinės realizacijos atveju UIView elementų aukštis ir plotis lieka nepakitę UIScrollView ar jos palikuonių (UITableView, UICollectionView) viduje slenkant:

Elementų padėtis (savybės frame.origin reikšmė) keičiasi atsižvelgiant į bounds scroll-view. Savybė bounds scroll-view pasislenkant juda, tačiau jos dydis (bounds.size) lieka pastovus (lyginant su frame.size).

Turinio dydis, kuris gali būti slenkamas, nustatomas pagal contentSize savybę. Elementai, esantys contentSize ribose, bus matomi slenkant:

Elemento dydžio keitimas slenkant (paralaksas ar suspaudimas/plečiama) automatiškai nevyksta ir reikalauja papildomos logikos:

  1. Įgyvendinimas UIScrollViewDelegate: Stebėti contentOffset pokyčius scrollViewDidScroll(_:) metode ir rankiniu būdu keisti reikalingo elemento frame ar bounds:

    // Pavyzdys, kaip keisti elemento aukštį slenkant
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let yOffset = scrollView.contentOffset.y
        let initialHeight: CGFloat = 200
        let maxHeight: CGFloat = 300
    
        // Suspaudimas žemyn, išplėtimas aukštyn
        let newHeight = max(0, min(maxHeight, initialHeight - yOffset))
        
        someView.frame.size.height = newHeight
        // Pozicijos apdorojimas, jei jis nėra viršuje tvirtinamas
    }
    
  2. Naudojant UIVisualEffectView: Efektų, tokių kaip išblukimas ar vibracija, kurie gali keistis slenkant priklausomai nuo po juo esančio turinio.

  3. Individualūs išdėstymai: UICollectionView galima sukurti individualų UICollectionViewLayout, kuris valdo langelių transformacijas slenkant.

  4. Animacijos: Naudojant UIViewPropertyAnimator ar kitus animacijos mechanizmus, kurie paleidžiami slenkant.

Taigi, pagrindinis elgesys — nekintantis dydis. Bet kokie dydžio pokyčiai — tai specifinės realizacijos rezultatas.