iosswiftuiscrollview

iOS 26: UIScrollView topEdgeEffect not applied


I am trying to use the topEdgeEffect API in iOS 26, but even setting the effect style to ".soft" does not work:

class ViewController: UIViewController {

  var scrollView: UIScrollView!

  override func viewDidLoad() {
    super.viewDidLoad()
    
    // Create and configure UIScrollView
    scrollView = UIScrollView()
    scrollView.translatesAutoresizingMaskIntoConstraints = false
    scrollView.topEdgeEffect.style = .soft // <- This should work
    view.addSubview(scrollView)
    
    // Pin scrollView to fill the whole view
    NSLayoutConstraint.activate([
      scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
      scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
      scrollView.topAnchor.constraint(equalTo: view.topAnchor),
      scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
    ])
    
    // Create label with multiline text
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 0
    label.text = """
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
(More long text)
"""

    // Add label to scrollView
    scrollView.addSubview(label)
    
    // Constraints to make label fill scrollView width and define content height
    NSLayoutConstraint.activate([
      label.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
      label.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
      label.topAnchor.constraint(equalTo: scrollView.topAnchor),
      label.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
      label.widthAnchor.constraint(equalTo: scrollView.widthAnchor) // fix width to scrollView width
    ])
  }
}

Example

Any help is appreciated! Running on Xcode 16.1.0 and an iOS 26.1 Simulator.


Solution

  • The top edge effect operates in relation to an overlaid glass top bar. You have no top bar. You need one. You might, for instance, like to wrap your view controller in a UINavigationController.