是否可以强制UIActivityViewController在 iOS 26.2上使用紧凑型分享表单?
在iOS 26上,一些应用会把UIActivityViewController显示为紧凑的浮动卡片(“Liquid Glass”风格)。我的实现总是显示全高的工作表。
触发iOS 26下 UIActivityViewController的紧凑展示需要满足什么条件?下方有示例图片。
环境:iPhone 16 Pro,iOS 26.2,Xcode 26.3
预期:紧凑的浮动分享工作表
实际:在所有场景下都是全高的工作表
我已经尝试了以下所有方法——都得到全高的工作表:
// Attempt 1: NSString
UIActivityViewController *vc = [[UIActivityViewController alloc]
initWithActivityItems:@[@"Check out this app!"]
applicationActivities:nil];
[self presentViewController:vc animated:YES completion:nil];
// Attempt 2: NSURL
NSURL *url = [NSURL URLWithString:@"https://example.com"];
UIActivityViewController *vc = [[UIActivityViewController alloc]
initWithActivityItems:@[url]
applicationActivities:nil];
[self presentViewController:vc animated:YES completion:nil];
// Attempt 3: Modern UIActivityItemsConfiguration API
NSURL *url = [NSURL URLWithString:@"https://example.com"];
NSItemProvider *provider = [[NSItemProvider alloc] initWithObject:url];
UIActivityItemsConfiguration *config = [UIActivityItemsConfiguration
activityItemsConfigurationWithItemProviders:@[provider]];
UIActivityViewController *vc = [[UIActivityViewController alloc]
initWithActivityItemsConfiguration:config];
[self presentViewController:vc animated:YES completion:nil];
// Attempt 4: UIActivityItemSource with LPLinkMetadata
- (LPLinkMetadata *)activityViewControllerLinkMetadata:(UIActivityViewController *)vc {
LPLinkMetadata *metadata = [[LPLinkMetadata alloc] init];
metadata.title = @"My App";
metadata.url = [NSURL URLWithString:@"https://example.com"];
return metadata;
}
预期分享托盘示例

实际分享托盘示例

解决方案
需要检查的两点:
- 确保你提供了LPLinkMetadata
如果你分享的是一个URL,请在UIActivityItemSource中实现activityViewControllerLinkMetadata(_:) 直接提供元数据。没有它,iOS会在运行时尝试从该URL获取元数据,可能导致加载变慢或分享工作表布局错误。
func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
let metadata = LPLinkMetadata()
metadata.originalURL = url
metadata.url = url
metadata.title = "Your title"
metadata.imageProvider = NSItemProvider(object: yourImage)
return metadata
}
- 在Info.plist中检查UIDesignRequiresCompatibility
这正是我实际的修复办法。如果你的应用在Info.plist中将UIDesignRequiresCompatibility设置为true,iOS将强制使用旧版全高分享工作表,无论你如何配置你的活动项或元数据。
将其设为false(或完全移除该键)即可让应用进入现代的紧凑分享工作表:
<key>UIDesignRequiresCompatibility</key>
<false/>
注意,这是一个应用范围的标志——它也会在整个应用中启用Liquid Glass风格(导航栏、标签栏、工作表、控件等)。目前还没有办法在不全面采用Liquid Glass重新设计的情况下使用紧凑的分享工作表。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。