iOS 26 – Clock app Timer picker skips final hour on very fast swipe

Hi everyone,

I found what looks like a picker issue on iOS 26 in the Clock app’s Timer screen, and I’m also seeing what appears to be the same behavior in UIPickerView in my own app.

What I’m Doing

I’m testing the Timer picker in the built-in Clock app.

When I swipe very quickly on the hours component, trying to reach the maximum value together with minutes and seconds:

  • 23 hours
  • 59 minutes
  • 59 seconds

I noticed that the picker does not always land on the expected final value.

I’m seeing a very similar issue with UIPickerView as well, especially in:

public func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)

When swiping very quickly to the end, the selected/logged row can be inconsistent with the final visible value.

Expected Behavior

When swiping quickly and stopping at the end, the Timer should correctly select:

23 hours, 59 minutes, 59 seconds

Likewise, in UIPickerView, didSelectRow should reflect the actual final selected row/value after the wheel settles.

Actual Behavior (iOS 26)

If I swipe quickly enough on the hours component, when the picker reaches:

23 hours, 59 minutes, 59 seconds

it appears to count from 22 hours instead of 23 hours.

So the final selected duration is effectively off by one hour, even though the wheel visually reaches the maximum end position.

I’m facing the same kind of issue with UIPickerView too. In particular, inside:

public func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)

when performing a very fast swipe, the reported row may behave unexpectedly near the end of the range.

Additional Notes

  • I reproduced this in the Clock app
  • Specifically on the Timer screen
  • The issue happens when the swipe velocity is high enough
  • I also face the same issue with UIPickerView in my own app

Question

Has anyone else seen this behavior in iOS 26?

Is this a known UIPickerView / wheel-picker issue, or a regression in the Timer picker logic?

Any guidance would be appreciated. Thanks!

P.S. I do have a video showing the issue, but I can’t upload it here. If someone could let me know the best way to share it, I’d appreciate it.

Thank you for the post. It is indeed interesting. I am assuming that adding a UIPickerView into the project would be easy to see and to reproduce of the issue?

Because you are also seeing the exact same behavior in the built-in Clock app and your own app, it strongly points to a issue however I’m not seeing this on the built-in Clock at all. Could it be something in your localization? Can you share a video that shows the issue how you see it? If possible, attach a minimal reproducible sample project containing just a UIPickerView that logs didSelectRow.

public func pickerView(…) {
  
    DispatchQueue.main.async {
        let actualSelectedRow = pickerView.selectedRow(inComponent: component)
        if actualSelectedRow != row {
            print("delegate reported \(row), but picker is actually at \(actualSelectedRow)")
           
        } else {
            // Use row
        }
    }
}

Something like this to log the results. So we can see exactly what is happening. Thanks

Albert
  Worldwide Developer Relations.

iOS 26 – Clock app Timer picker skips final hour on very fast swipe
 
 
Q