別のセルの他のコンテンツの一部が大きい場合でも、セルをきちんとまとめたい場合は、どうすればよいでしょうか?
下の写真を見ると、最初の文字列が一番大きいのですが、サイズに関係なく、他のセルを最初のセルと同じようにきれいにぎゅっと詰め込みたい場合は、どうすればよいでしょうか?
横からも上下からも大小問わずやりたいです。この図の矢印が指しているように、セルを配置したいと思います。
更新: テキストの最初の行は、2 つのセルが一緒にパックされています。
別のセルの他のコンテンツの一部が大きい場合でも、セルをきちんとまとめたい場合は、どうすればよいでしょうか?
下の写真を見ると、最初の文字列が一番大きいのですが、サイズに関係なく、他のセルを最初のセルと同じようにきれいにぎゅっと詰め込みたい場合は、どうすればよいでしょうか?
横からも上下からも大小問わずやりたいです。この図の矢印が指しているように、セルを配置したいと思います。
更新: テキストの最初の行は、2 つのセルが一緒にパックされています。
これを実現するには、 UICollectionViewFlowLayoutを使用する必要があります。
注: 以下の情報は、Raywenderlich ブログから取得したものです。
UICollectionViewLayoutをサブクラス化して独自のカスタム レイアウトを作成できますが、Apple は親切にもUICollectionViewLayoutと呼ばれる基本的な「フローベース」のレイアウトを開発者に提供しています。グリッド ビューのように、サイズに基づいて要素を次々にレイアウトします。このレイアウト クラスをすぐに使用することも、サブクラス化して興味深い動作や視覚効果を得ることができます。
Raywenderlich ブログで良い例を見ることができます
コード例:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
NSString *searchTerm = self.searches[indexPath.section]; FlickrPhoto *photo =
self.searchResults[searchTerm][indexPath.row];
CGSize retval = photo.thumbnail.size.width > 0 ? photo.thumbnail.size : CGSizeMake(100, 100);
retval.height += 35; retval.width += 35; return retval;
}
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(50, 20, 50, 20);
}
これ以外にも実装できるデリゲート メソッドがあります。例を以下に示します
collectionView:layout:sizeForItemAtIndexPath
collectionView:layout:insetForSectionAtIndex: