2016-06-09 48 views
0

我想在我的iOS快速應用程序中創建一個類似風格Trover所做的畫廊,所以基本上我想有一個圖像數組,指定最大數量的圖像適合一行,然後我想動態生成UIImageViews,其中由代碼確定的幀大小創建下面的拼貼效果。我知道這可以在Android中使用recyclerView完成,但我不確定在iOS中最好的方法是什麼,我知道我可以使用TableView,CollectionView或StackView,但我不確定最簡單的方法是什麼是...我過去使用CollectionViews的方式是因爲他們的CollectionViewCell有一個靜態大小,因此我不確定如何使它們適應此目的。創建特洛伊風格畫廊iOS Swift

enter image description here

+0

使用UICollectionView,您可以使用自定義佈局。看起來,從你的屏幕截圖(我不使用應用程序,簡單的猜測),只有2種線,所以你甚至可能不需要創建一個完整的自定義佈局。根據它的索引行(這裏,我會說每4個單元格,它的大小相同)只是給出該項目的大小,它應該就足夠了。 – Larme

+0

您是否建議可以說一塊照片是一個'UICollectionViewCell'並取決於我想如何佈局,我在該單元格內動態創建imageViews?例如,一個單元格可以有2個ImageViews或4個ImageViews等,我只是隨機選擇了我想要的設計? – Alk

+0

我爲UICollectionView添加了一個示例代碼(在Objective-C中,但邏輯應該是相同的,沒有什麼真正複雜的,除了可能是「模數」,但其餘的看起來像很多Swift。 – Larme

回答

1

從給出的圖片上的炒作,我們可以假設每4個項目,佈局是一樣的。因此,我們可以用一個UICollectionView,我們可以(見注在回答結束)只需要重寫collectionView:layout:sizeForItemAtIndexPath:與Objective-C的下面的代碼,但道理是一樣的斯威夫特:

CGFloat wholeWidthAvailable = collectionView.frame.size-interspace; //Since we only show 2 item per line, there is only 1 interspace 
CGFloat height; 

switch (indexPath.row%2) 
{ 
    case 0: 
     height = 100; 
     break; 
    case 1: 
     height = 200; 
     break; 
    default: 
     break; 
} 
CGFloat width; 
switch (indexPath.row%4) 
{ 
    case 0: 
     width = wholeWidthAvailable*2./5.; 
     break; 
    case 1: 
     width = wholeWidthAvailable*3./5.; 
     break; 
    case 2: 
     width = wholeWidthAvailable*3./5.; 
     break; 
    case 3: 
     width = wholeWidthAvailable*2./5.; 
     break; 
    default: 
     break; 
} 
return CGSizeMake(width, height); 

注意:
代碼沒有測試(我在這裏寫的,我不知道它是否編譯爲這樣)。
我明確寫了兩個開關的情況,但它顯然可以在一箇中使用,因爲模2和模4可以「加入」。
我已經選擇了2/5和3/5以適應寬度(但是您可以清楚地放置請你的比例)。

+0

如果我想做這個更復雜,例如有4種可能的佈局,其中一種包含2個圖像瀏覽,3,4和5,並隨機更改它們,在collectionViewCell類中或在像上面建議的collectionView委託方法中執行此操作會更容易 – Alk