2016-12-09 37 views
0

我正在嘗試動態加載iOS 10的Message Extension貼紙。我已成功加載這些圖標;然而,它們未能適當地限制消息應用程序的比例。MSStickerBrowserView貼紙走出框架

在緊湊的消息擴展視圖中,它有一個頁腳。這可以在這裏看到: 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似乎是以編程方式創建的,因此故事板約束條件不可用,我也無法將任何編程約束應用於視圖的單元格。

我真的不知道如何解決這個問題,並會喜歡任何建議。

+0

MSStickerBrowserView不是UICollectionViewSubclass,它繼承自UIView,MSStickerBrowserViewController是UIViewController而不是UICollectionViewController,它有助於解釋iMessage應用程序中的不同行爲。 –

回答

0

嘗試勾選下面爲您的視圖控制器選項:

  • 在最熱門酒吧

enter image description here

希望它會工作....

+0

但是,感謝您的答案,但不幸的是它沒有奏效。看起來消息應用中的這些頁眉/頁腳不被視爲導航欄/狀態欄。 – Aaron

+0

Aaron非常正確,整個iMessage應用程序實際上都位於一種沙盒中,這意味着它嵌入了一個更大的視圖控制器,該控制器對iMessage框架是私有的。這使iMessage中的複雜應用程序難以構建,因爲很難找出顯示區域的大小,自動佈局方面也不能以標準方式工作,至少在iOS 11和更早版本中不是。 –

0

您可以嘗試使用故事板佈局視圖並在browserView下添加一個空視圖來解決

1

我解決這個問題的方法是使用帶有狀態變量的UICollectionViewController來表示當前在演示時設置的演示樣式(.expanded或.compact)。

然後在viewWillAppear中我UICollectionViewController,我依賴於信息的呈現樣式

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

CELLPADDING是一些我在我的collectionViewLayout設置itemSize後計算的,但95的值只是設定的CollectionView的contentInset一個猜測/ kludge,因爲我還沒有找到如何獲得包含iMessage頂級導航欄的大小。