iOS

⌘K
  1. Home
  2. Docs
  3. iOS
  4. UI Controls
  5. Scroll Views (UIScrollView)

Scroll Views (UIScrollView)

What is UIScrollView?

UIScrollView is a UIKit component that allows users to scroll through a content view that is larger than the screen. It supports vertical and horizontal scrolling, zooming, and paging.


1. Key Features of UIScrollView

✅ Supports vertical & horizontal scrolling
✅ Allows zooming for images and other content
✅ Enables paging for swipe-based interfaces
✅ Handles content offset and insets for flexible layouts
✅ Works with Auto Layout and programmatic constraints


2. How to Add UIScrollView in Storyboard

  1. Drag & Drop a UIScrollView from the Object Library.
  2. Set constraints (Pin edges to the Safe Area or Superview).
  3. Add a UIView inside the UIScrollView (this is the content view).
  4. Set constraints for the content view (Pin to ScrollView edges and set width & height if needed).
  5. Add labels, images, or other UI elements inside the content view.
  6. Ensure the Content Size of UIScrollView is large enough for scrolling.

3. Implementing UIScrollView Programmatically

import UIKit

class ViewController: UIViewController {
    let scrollView = UIScrollView()
    let contentView = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()

        setupScrollView()
    }

    func setupScrollView() {
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        contentView.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(scrollView)
        scrollView.addSubview(contentView)

        // Constraints for UIScrollView
        NSLayoutConstraint.activate([
            scrollView.topAnchor.constraint(equalTo: view.topAnchor),
            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])

        // Constraints for contentView inside UIScrollView
        NSLayoutConstraint.activate([
            contentView.topAnchor.constraint(equalTo: scrollView.topAnchor),
            contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
            contentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
            contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
            contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor), // Ensures vertical scrolling
            contentView.heightAnchor.constraint(equalToConstant: 1200) // Set larger height for scrolling
        ])

        // Add a label to contentView
        let label = UILabel()
        label.text = "Scrollable Content"
        label.textAlignment = .center
        label.translatesAutoresizingMaskIntoConstraints = false
        contentView.addSubview(label)

        NSLayoutConstraint.activate([
            label.centerXAnchor.constraint(equalTo: contentView.centerXAnchor),
            label.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 50)
        ])
    }
}

This will create a vertical scrollable view with a label.


4. Handling Scrolling Programmatically

You can modify the scroll behavior dynamically.

4.1 Adjusting Content Size Manually

scrollView.contentSize = CGSize(width: view.frame.width, height: 2000) // Makes it scrollable

4.2 Scrolling to a Specific Position

scrollView.setContentOffset(CGPoint(x: 0, y: 500), animated: true)

4.3 Detecting Scroll Events

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    print("Scrolling... Current Offset: \(scrollView.contentOffset)")
}

➡️ Don’t forget to set scrollView.delegate = self and conform to UIScrollViewDelegate


5. Zooming in UIScrollView

UIScrollView supports pinch-to-zoom when a UIImageView or similar view is added.

5.1 Enabling Zoom

scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 5.0
scrollView.delegate = self

5.2 Implementing View for Zooming

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imageView // The view that should be zoomed
}

6. Paging with UIScrollView

If you need a swipeable screen (like onboarding pages), enable paging.

scrollView.isPagingEnabled = true

➡️ This makes sure each page aligns perfectly when scrolling.


7. UIScrollView with Auto Layout (Common Issues & Fixes)

❌ Issue: ScrollView Not Scrolling

Fix: Ensure the contentView has constraints that define its size.

contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
contentView.heightAnchor.constraint(equalToConstant: 1500).isActive = true

❌ Issue: ScrollView Bounces Too Much

Fix: Disable bounce effects

scrollView.bounces = false
scrollView.alwaysBounceVertical = false
scrollView.alwaysBounceHorizontal = false

❌ Issue: ScrollView Not Scrolling Horizontally

Fix: Set explicit width

contentView.widthAnchor.constraint(equalToConstant: 1200).isActive = true

8. Conclusion

✔️ UIScrollView is essential for handling large content in an iOS app
✔️ Supports scrolling, zooming, and paging
✔️ Works with Auto Layout and programmatic UI
✔️ Ensure correct constraints for proper functionality

Would you like a custom implementation for your project? 🚀