Post

Replies

Boosts

Views

Activity

Button or onTapGesture grows its hit region by a fixed amount past the view’s bounds.
SwiftUI Button hit area extends ~16pt beyond its visual frame — expected OS behavior? Hi everyone, I’m working on a custom SwiftUI segmented control and noticed some unexpected hit-testing behavior with Button. I have a button structured roughly like this: Button { selectItem(at: index) } label: { ZStack { if selectedIndex == index { selectedBackground } SegmentCellView( tab: tab, isSelected: selectedIndex == index ) } .frame(maxWidth: .infinity) .contentShape(Rectangle()) } .accessibilityLabel(Text(tab.labelText)) The visual frame of the button has a certain height, but when testing on a real device, I can tap approximately 16pt outside the button's visible frame and the button still receives the tap. This seems to happen even though I explicitly use: .contentShape(Rectangle()) to define the tappable shape. My questions are: Is this ~16pt expansion of the interactive area expected SwiftUI/OS behavior? Is this related to Apple's minimum hit-target/accessibility guidelines being automatically applied to controls such as Button? If so, is there an official API/documentation describing this behavior? Is there a recommended way to make the Button's hit-testing area exactly match the bounds defined by .contentShape(Rectangle()), if that is actually possible? I'm particularly interested in understanding whether this is intentional system behavior or something caused by the ButtonStyle / layout hierarchy. Thanks!
0
0
106
Oct ’26
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.
Topic: UI Frameworks SubTopic: UIKit
1
0
170
Apr ’26
navigationItem.titleView shifted left when leftBarButtonItem is nil in iOS 26
iOS 26 – navigationItem.titleView shifted left when leftBarButtonItem is nil Hi everyone, I’m encountering a layout issue on iOS 26 related to navigationItem.titleView positioning. What I’m Doing I’m hiding the default back button and removing the left bar button item: navigationItem.leftBarButtonItem = nil navigationItem.hidesBackButton = true navigationItem.setLeftBarButtonItems([], animated: true) Then I create a custom titleView with a specific width calculated as: Screen width minus the width of the two bar button items (left and right). let titleView = UIView(frame: CGRect(origin: .zero, size: sizeOfTitleView)) let titleLabel = UILabel(frame: CGRect(origin: .zero, size: sizeOfTitleView)) Expected Behavior On previous iOS versions, the titleView is perfectly centered in the navigation bar. Actual Behavior (iOS 26) On iOS 26, when leftBarButtonItem is nil, the titleView is pushed slightly to the left instead of being centered (see attached image). Question Has there been a change in UINavigationBar layout behavior in iOS 26? What is the correct way to ensure the titleView remains perfectly centered when there is no leftBarButtonItem? Any guidance would be appreciated. Thanks!
Topic: UI Frameworks SubTopic: UIKit Tags:
0
0
353
Feb ’26
Button or onTapGesture grows its hit region by a fixed amount past the view’s bounds.
SwiftUI Button hit area extends ~16pt beyond its visual frame — expected OS behavior? Hi everyone, I’m working on a custom SwiftUI segmented control and noticed some unexpected hit-testing behavior with Button. I have a button structured roughly like this: Button { selectItem(at: index) } label: { ZStack { if selectedIndex == index { selectedBackground } SegmentCellView( tab: tab, isSelected: selectedIndex == index ) } .frame(maxWidth: .infinity) .contentShape(Rectangle()) } .accessibilityLabel(Text(tab.labelText)) The visual frame of the button has a certain height, but when testing on a real device, I can tap approximately 16pt outside the button's visible frame and the button still receives the tap. This seems to happen even though I explicitly use: .contentShape(Rectangle()) to define the tappable shape. My questions are: Is this ~16pt expansion of the interactive area expected SwiftUI/OS behavior? Is this related to Apple's minimum hit-target/accessibility guidelines being automatically applied to controls such as Button? If so, is there an official API/documentation describing this behavior? Is there a recommended way to make the Button's hit-testing area exactly match the bounds defined by .contentShape(Rectangle()), if that is actually possible? I'm particularly interested in understanding whether this is intentional system behavior or something caused by the ButtonStyle / layout hierarchy. Thanks!
Replies
0
Boosts
0
Views
106
Activity
Oct ’26
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.
Topic: UI Frameworks SubTopic: UIKit
Replies
1
Boosts
0
Views
170
Activity
Apr ’26
navigationItem.titleView shifted left when leftBarButtonItem is nil in iOS 26
iOS 26 – navigationItem.titleView shifted left when leftBarButtonItem is nil Hi everyone, I’m encountering a layout issue on iOS 26 related to navigationItem.titleView positioning. What I’m Doing I’m hiding the default back button and removing the left bar button item: navigationItem.leftBarButtonItem = nil navigationItem.hidesBackButton = true navigationItem.setLeftBarButtonItems([], animated: true) Then I create a custom titleView with a specific width calculated as: Screen width minus the width of the two bar button items (left and right). let titleView = UIView(frame: CGRect(origin: .zero, size: sizeOfTitleView)) let titleLabel = UILabel(frame: CGRect(origin: .zero, size: sizeOfTitleView)) Expected Behavior On previous iOS versions, the titleView is perfectly centered in the navigation bar. Actual Behavior (iOS 26) On iOS 26, when leftBarButtonItem is nil, the titleView is pushed slightly to the left instead of being centered (see attached image). Question Has there been a change in UINavigationBar layout behavior in iOS 26? What is the correct way to ensure the titleView remains perfectly centered when there is no leftBarButtonItem? Any guidance would be appreciated. Thanks!
Topic: UI Frameworks SubTopic: UIKit Tags:
Replies
0
Boosts
0
Views
353
Activity
Feb ’26