我正在尝试为iOS 10的Messages Extension动态加载贴纸。我已成功加载这些图标;但是,他们无法正确约束消息应用程序的比例。
我通过MSStickerBrowserView加载这些贴纸是MSStickerBrowserView的子视图。我重写了numberOfStickers和stickerBrowserView的超类方法来加载我的图像。
据我所知,MSStickerBrowserView只是UICollectionView的包装器。
无论如何,在加载贴纸后,它们不会受到页眉和页脚的限制。我附上了我的意思下面的gif:
正如您所看到的,在紧凑视图中,最后一排贴纸位于页脚下方。因此,在展开的视图中,顶部的贴纸位于标题下方。
作为一项实验,我实现了相同的动态贴纸系统,但使用了实际的UICollectionViewController和UICollectionView(而不是MSStickerBrowser包装器),并实现了相同的效果。此外,我尝试为此创建自定义布局,但它产生了相同的结果。
我更愿意坚持使用MSStickerBrowserView,因为它已经为此目的而制作;但是,如果你看到UICollectionView更合适,我愿意改变。
请注意,通过使用MSStickerBrowserViewController和View,UICollectionView似乎是以编程方式创建的,因此无法使用storyboard约束,并且我无法将任何编程约束应用于视图的单元格。
我不确定如何解决这个问题,并且会喜欢任何建议。
答案 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)
答案 2 :(得分:0)
您可以尝试使用storyboard来布局视图,并在browserView下添加一个空视图来解决