是否可以强制UIActivityViewController在 iOS 26.2上使用紧凑型分享表单?

移动开发 2026-07-11

在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;
}

预期分享托盘示例

实际分享托盘示例

解决方案

需要检查的两点:

  1. 确保你提供了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
}
  1. 在Info.plist中检查UIDesignRequiresCompatibility

这正是我实际的修复办法。如果你的应用在Info.plist中将UIDesignRequiresCompatibility设置为true,iOS将强制使用旧版全高分享工作表,无论你如何配置你的活动项或元数据。

将其设为false(或完全移除该键)即可让应用进入现代的紧凑分享工作表:

<key>UIDesignRequiresCompatibility</key>
<false/>

注意,这是一个应用范围的标志——它也会在整个应用中启用Liquid Glass风格(导航栏、标签栏、工作表、控件等)。目前还没有办法在不全面采用Liquid Glass重新设计的情况下使用紧凑的分享工作表。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章