Summary: On iOS 26, UISwitch has a Liquid Glass dynamic highlight/shadow effect that is not clipped by an ancestor view's bounds, even inside a UIModalPresentationFormSheet card. This is visible in two ways: (1) a plain tap on a switch positioned near the form sheet's edge already shows the highlight/shadow rendering outside the card's rounded border; (2) pressing and dragging the finger away from the switch drags this effect along with the touch, and it can end up rendered far outside the form sheet, well past the presentation area.
Steps to Reproduce:
Run the attached minimal project on an iOS 26 device/simulator. Tap "Present Form Sheet" to present a UIModalPresentationFormSheet containing a UITableView, with a UISwitch near the trailing edge of each row. Simply tap a switch near the sheet's edge — notice the dynamic highlight/shadow already overflows past the form sheet's rounded border. Now press and hold a switch, then quickly swipe/drag the finger downward (or in any direction) without lifting — notice the highlight/shadow follows the finger and gets dragged far outside the form sheet's bounds, over the dimmed presentation background. Expected Results: The Liquid Glass dynamic highlight/shadow effect should be clipped to the bounds of the form sheet card at all times, whether triggered by a plain tap or a drag gesture.
Actual Results:
On a plain tap near the edge: the highlight/shadow already overflows just past the form sheet's rounded border, unclipped. On press-and-drag: the highlight/shadow follows the finger and can be dragged far outside the form sheet — well beyond the card's edges and the presentation area. Configuration:
iOS 26.x simulator/device Xcode 26.x
// LiquidGlassSwitchDemo
//
// Minimal repro: UISwitch's Liquid Glass transition effect (iOS 26) is not
// clipped by a UIModalPresentationFormSheet card, which clips everything else.
//
#import "AppDelegate.h"
// Form sheet content: a table view full of UISwitch cells.
@interface WMSwitchGlassCardViewController : UIViewController <UITableViewDataSource>
@end
@implementation WMSwitchGlassCardViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.preferredContentSize = CGSizeMake(320, 400);
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleInsetGrouped];
tableView.dataSource = self;
tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:tableView];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 8;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
cell.textLabel.text = [NSString stringWithFormat:@"Option %ld", (long)indexPath.row + 1];
UISwitch *toggle = [[UISwitch alloc] init];
toggle.on = YES;
cell.accessoryView = toggle;
// Actual: while toggling, the glass glow/shadow renders outside the form
// sheet's rounded corners and floats over the dimmed background — the
// card's clipsToBounds / rounded corners have no effect on the effect.
return cell;
}
@end
// Root screen: a single button that presents the card above as a form sheet.
@interface WMRootViewController : UIViewController
@end
@implementation WMRootViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = UIColor.systemBackgroundColor;
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
[button setTitle:@"Present Form Sheet" forState:UIControlStateNormal];
[button addTarget:self action:@selector(presentCard) forControlEvents:UIControlEventTouchUpInside];
button.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:button];
[NSLayoutConstraint activateConstraints:@[
[button.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor],
[button.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor],
]];
}
- (void)presentCard {
UIViewController *card = [WMSwitchGlassCardViewController new];
card.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:card animated:YES completion:nil];
}
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
self.window.rootViewController = [WMRootViewController new];
[self.window makeKeyAndVisible];
return YES;
}
@end```