我正在尝试为iOS 10的消息扩展动态加载贴纸。我已经成功地加载了这些图标;但是,它们无法正确地限制消息应用程序的比例。
在消息扩展的紧凑视图中,它有一个页脚。这可以在这里看到:

在邮件扩展名的展开视图中,它有一个标题。

我通过MSStickerBrowserView的一个子视图MSStickerBrowserView加载这些贴纸。我覆盖了numberOfStickers和stickerBrowserView的超类方法来加载我的图像。
据我所知,MSStickerBrowserView只是一个UICollectionView的包装器。
无论如何,在加载贴纸之后,它们不会被限制在页眉和页脚。我附上了一个gif,下面是我的意思:

如您所见,在紧凑视图中,最后一行贴纸位于页脚下。相应地,在展开的视图中,顶行的贴纸位于标题下。
作为实验,我实现了相同的动态贴纸系统,但使用了实际的UICollectionViewController和UICollectionView (而不是MSStickerBrowser包装器),并且达到了相同的效果。此外,我试图为此创建一个自定义布局,但它产生了相同的结果。
我更喜欢使用MSStickerBrowserView,因为它已经是为此目的而设计的;但是,如果您认为UICollectionView更适合我,我愿意更改它。
请注意,通过使用MSStickerBrowserViewController和视图,UICollectionView似乎是以编程方式创建的,因此故事板约束不可用,并且我无法对视图的单元格应用任何编程构造。
我真的不确定如何解决这个问题,并希望有任何建议。
发布于 2017-04-29 01:32:06
我解决这个问题的方法是使用一个带有状态变量的UICollectionViewController来表示我在表示时设置的当前表示样式(.expanded或.compact)。
然后在我的UICollectionViewController的viewWillAppear中,我根据表示风格设置了集合视图的contentInset
if let style = self.presentationStyle, style == .expanded {
collectionView?.contentInset = UIEdgeInsets(top: 95, left: cellPadding, bottom: cellPadding, right: cellPadding)
} cellPadding是我在collectionViewLayout中设置itemSize后计算出的一个数字,但95的值只是一个猜测,因为我还没有找到如何获得包含iMessage的顶部导航栏的大小。
发布于 2016-12-09 13:55:59
尝试取消选中视图控制器的以下选项:
Top Bar下的

希望它能起作用……
发布于 2017-03-16 18:45:15
您可以尝试使用序列图像板来布局视图,并在browserView下添加一个空视图来求解
https://stackoverflow.com/questions/41053861
复制相似问题