MSStickerBrowserView贴纸超出框架

时间:2016-12-09 05:46:47

标签: ios objective-c swift msstickerview

我正在尝试为iOS 10的Messages Extension动态加载贴纸。我已成功加载这些图标;但是,他们无法正确约束消息应用程序的比例。

在邮件扩展的紧凑视图中,它有一个页脚。这可以在这里看到: enter image description here

在邮件扩展的展开视图中,它有一个标题。 enter image description here

我通过MSStickerBrowserView加载这些贴纸是MSStickerBrowserView的子视图。我重写了numberOfStickers和stickerBrowserView的超类方法来加载我的图像。

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

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

enter image description here

正如您所看到的,在紧凑视图中,最后一排贴纸位于页脚下方。因此,在展开的视图中,顶部的贴纸位于标题下方。

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

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

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

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

3 个答案:

答案 0 :(得分:1)

我修复它的方法是使用带状态变量的UICollectionViewController来表示我在演示时设置的当前表示样式(.expanded或.compact)。

然后在viewWillAppear中为我的UICollectionViewController,我根据演示风格设置了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的大小顶部导航栏。

答案 1 :(得分:0)

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

  • 在顶栏下

enter image description here

希望它能奏效....

答案 2 :(得分:0)

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