質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

370閲覧

UICollectionViewでタグが左寄せに並んでいるようなレイアウトを実現したい

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/08/25 06:05

###前提・実現したいこと
Qiitaのこのページに記載されている内容を実現したいのですが、

UICollectionViewでタグが左寄せに並んでいるようなレイアウトを実現する
http://qiita.com/kazuhiro4949/items/03bc3d17d3826aa197c0

UICollectionViewFlowLayoutを割り当てる方法がわかりません。
「UICollectionViewLayout」でしたらStoryBoardで一応選択できますが、
Swift 3でのUICollectionViewLayoutの書き方も、
ネットで日本語の情報が少ないため、さっぱり理解できません。

本もいくつか購入してみたのですが、そもそも「UICollectionView」に関する
解説が少なかったりして、もうお手上げの状態です。

###教えてください

UICollectionViewでタグが左寄せに並んでいるようなレイアウトを実現する
http://qiita.com/kazuhiro4949/items/03bc3d17d3826aa197c0

のページを実現・理解するための情報を教えてください。

上記のページを実現するための手順や、解説のページの情報や、
UICollectionViewLayoutやUICollectionViewFlowLayoutの使い方を解説したページなどがありましたら、
教えていただきたいです。
どんな細かな情報でも、教えていただけたらありがたいです。
英語のページでも、どうにかがんばって読みたいと思います。

どうか、よろしくお願いいたします。

###環境
Swift 3
Xcode 8.3.3
OS X Sierra 10.12.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Swift3を勉強する気がないのであれば、Swift2で開発すればいいのではないでしょうか?

【追記】
コメントへの返信ですが、見にくくなるのでこちらに書きます。

リファレンスを見る/探すのは基本です。
(いちいちリンクを張っていますが、Xcodeで見ることが出来る情報です)

indexPath

let indexPath = NSIndexPath(forItem:count, inSection:0) // <= ここでエラー

itemとsectionによる初期化は NSIndexPath(item:section:) ですので、

swift

1let indexPath = NSIndexPath(item: count, section: 0)

となりますが、UICollectionViewLayoutAttributes(forCellWith:)に渡すのはNSIndexPathではなくIndexPathに変わっていますのでIndexPath(item:section:)を使います。

swift

1let indexPath = IndexPath(item: count, section: 0)

collectionViewContentSize

override func collectionViewContentSize() -> CGSize { // <= ここでエラー

collectionViewContentSizeを見ると、func(関数)ではなくvar(変数/プロパティ)に変わっていますので、

swift

1override var collectionViewContentSize: CGSize { 2 //(中略) 3 return CGSize(width:allWidth, height:allHeight) 4}

でいけると思います。

Storyboard

Storyboard=>Collection View=>Layoutをカスタムにして、Classにわりあてようとしたのですが、

でませんでした。

TextLayoutを割り当てようとしているんですよね?普通なら、ClassのところにTと入力した時点で補完されるはずですが‥。ひとまず、エラーが無くなってからもう一度試してみて下さい。

投稿2017/08/25 06:13

編集2017/08/25 07:52
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/25 06:23

Swift3は勉強しています。 Swift2のUICollectionViewLayoutの記述をSwift3に直そうとしたのですが、失敗しました。 基本、Swift3で開発しているので、Swift2だとエラーが出て立ち行かなくなります。 英語の情報でもいいので、わかりやすい、 UICollectionViewLayoutの使い方の情報は、ないものでしょうか。 できればSwift3だとありがたいです。
fuzzball

2017/08/25 06:28 編集

「使い方」はSwift2でもSwift3でも同じでしょう。書き方などが少し変わっているだけです。 これに関しては「Swift2→Swift3]のような記事を探すといいでしょう。(Xcodeでもそれなりに変換出来るはずですが‥) また、失敗したのであれば、そのコードを書いて下さい。 ところで、リンク先記事のコメント欄に書かれているコードは目的のものではないのでしょうか?
退会済みユーザー

退会済みユーザー

2017/08/25 06:59

試したコードは、こちらのページのものです。 http://hajihaji-lemon.com/smartphone/swift/uicollectionviewlayout/ Xcodeで修正してみたのですが、直しきれない箇所が2つありました、 import UIKit class TextLayout: UICollectionViewLayout { let numberColumns = 2 //列数 let height:CGFloat = 50 //セルの高さ //レイアウト配列 private var layoutData = [UICollectionViewLayoutAttributes]() //レイアウトを準備するメソッド override func prepare() { //全体の幅 let allWidth = collectionView!.bounds.width - collectionView!.contentInset.left - collectionView!.contentInset.right //列の幅 let columnWidth = allWidth / CGFloat(numberColumns) //座標 var y:CGFloat = 0 var x:CGFloat = 0 //要素数ぶんループ for count in 0 ..< collectionView!.numberOfItems(inSection: 0) { let indexPath = NSIndexPath(forItem:count, inSection:0) // <= ここでエラー //レイアウトの配列に位置とサイズを登録する。 let frame = CGRect(x:x, y:y, width:columnWidth, height: height) let attributes = UICollectionViewLayoutAttributes(forCellWithIndexPath: indexPath) attributes.frame = frame layoutData.append(attributes) //X座標を更新 if(count % 2 == 0) { x = columnWidth } else { x = 0 } //Y座標を更新 y = y + height } } //レイアウトを返すメソッド override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { return layoutData } //全体サイズを返すメソッド override func collectionViewContentSize() -> CGSize { // <= ここでエラー //全体の幅 let allWidth = collectionView!.bounds.width - collectionView!.contentInset.left - collectionView!.contentInset.right //全体の高さ let allHeight = CGFloat(collectionView!.numberOfItems(inSection: 0)) * height return CGSize(width:allWidth, height:allHeight) } } 私はまだ全然UICollectionViewLayoutを理解していないので、 リンク先記事のコメント欄のコードを、 Storyboard=>Collection View=>Layoutをカスタムにして、Classにわりあてようとしたのですが、 でませんでした。 もしかしたらCollectionViewをコードで作成ないと使えないのかなと、素人ながら想像しています。
退会済みユーザー

退会済みユーザー

2017/08/25 08:24

あいがとうございました。 TextLayoutが割り当てられるようになりました。 いままではリファレンスの読み方がわからず、サンプルコードを必死に探していましたが、 少しずつリファレンスを読めるように努力したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問