1

我正在尝试为 iOS 10 的消息扩展动态加载贴纸。我已成功加载这些图标;但是,它们未能正确限制消息应用程序的比例。

在消息扩展的紧凑视图中,它有一个页脚。这可以在这里看到: 在此处输入图像描述

在消息扩展的展开视图中,它有一个标题。 在此处输入图像描述

我正在通过 MSStickerBrowserView 的 MSStickerBrowserView 的子视图加载这些贴纸。我正在覆盖 numberOfStickers 和stickerBrowserView 的超类方法来加载我的图像。

据我所知,MSStickerBrowserView 只是 UICollectionView 的包装器。

无论如何,在加载贴纸后,它们不会被限制在页眉和页脚中。我在下面附上了我的意思的GIF:

在此处输入图像描述

如您所见,在紧凑视图中,最后一行贴纸位于页脚下方。因此,在展开视图中,顶行贴纸位于标题下方。

作为一个实验,我实现了相同的动态贴纸系统,但使用了实际的 UICollectionViewController 和 UICollectionView(而不是 MSStickerBrowser 包装器),并实现了相同的效果。此外,我试图为此创建一个自定义布局,但它产生了相同的结果。

我宁愿坚持使用 MSStickerBrowserView,因为它已经为此目的而制作;但是,如果您看到 UICollectionView 更合适,我愿意更改。

请注意,使用 MSStickerBrowserViewController 和 View 时,UICollectionView 似乎是以编程方式创建的,因此情节提要约束不可用,并且我无法将任何编程约束应用于视图的单元格。

我不太确定如何解决这个问题,并且会喜欢任何建议。

4

3 回答 3

2

我解决这个问题的方法是使用带有状态变量的 UICollectionViewController 来表示我在演示时设置的当前演示样式(.expanded 或 .compact)。

然后在我的 UICollectionViewController 的 viewWillAppear 中,我根据演示样式设置了 collectionView 的 contentInset

if let style = self.presentationStyle, style == .expanded { 
    collectionView?.contentInset =  UIEdgeInsets(top: 95, left: cellPadding, bottom: cellPadding, right: cellPadding)
} 

cellPadding 是我在 collectionViewLayout 中设置 itemSize 后计算的一个数字,但 95 的值只是一个猜测/kludge,因为我还没有找到如何获取包含 iMessage 顶部导航栏的大小。

于 2017-04-28T17:32:05.797 回答
0

尝试为您的视图控制器取消选中以下选项:

  • 在顶栏下

在此处输入图像描述

希望它会工作....

于 2016-12-09T05:55:58.693 回答
0

可以尝试使用storyboard来布局视图,在browserView下添加一个空视图来解决

于 2017-03-16T10:45:15.110 回答