请允许我用Storyboard来表明我的需求。 如图,在这个tableview里面有两个大的cell,一个是另外tableview,一个是collectionview。而且这两个大的cell的高度不是固定的,当点击加载更多的时候,对应的cell里面的tableview长度会增长,cell也会增长(换言之,在这两个cell里面所有内容都需要被全部展示,而不是滑动)。请问如果是这种需求的话,该如何设计呢?
走同样的路,发现不同的人生
你的情况其实仅仅一个collectionView就可以搞定了,根据数据源分组对应分几个section,展示更多时候,就修改对应section中的数据源,刷UI就好了,你所“必须”要关注的是你的CollectionView的contentSize以及如何Layout,还有优化的话考虑Cache layout类中的attributes.
今日、このように collectionView のネストされた collectionView を書きました (問題を探しているだけではなく、要求されました)。そのアイデアについて話しましょう (TableView のネストも同様です。XIB/SB と純粋なコードの違いは無視してください...) ) PS:いくつか間違いがあります。CollectionView マスターが来て修正してくれるといいのですが...Orz 1) カスタムセル collectionView をハングする必要があるセルに次のコードを貼り付けます:
2) セル内の CollectionView はセルの後に初期化されることに注意してください。つまり、セル内の CollectionView のデータ ソースとプロキシはセルを初期化した直後に設定する必要があります。そうしないとクラッシュについては説明されません。
3.1) セル内の CollectionView のデータ ソースを変更し (データのアクティブ/パッシブ変更などの変更がある場合)、CollectionView 属性を変更し (layoutAttribute が変更されます)、2 つの CollectionView を再配置します。 (tableViewはreloatに対応するindexPathです)
4) 愚痴を言い続ける: CollectionView の本質はレイアウトを書けるかどうかにあります。 。 CollectionView を使用すると、TableView に別れを告げることができますが、学習するのにある程度の時間がかかり、そうでないと使いこなすのが難しくなります。 推奨リソース:
理論的にはセルにUITableViewを追加する(外側のセルを内側のtableViewのデリゲートとして機能させる)ことは可能かもしれませんが、そのような書き方は見たことがなく、非常にまずい気がします。理由は 2 つあります:
対応するセルのテーブルビューの長さが長くなり、セルも長くなります (つまり、これら 2 つのセルのすべてのコンテンツは、スライドするのではなく完全に表示される必要があります)
しかし、UITableView の高さは固定されており、内部には ScrollView があります。当然、全表示ではなくスクロールに適しています。
この要件は、上下 2 つの大きなセルを 2 つのセクションとして考えることができると思います。上の大きなセルは最初のセクションに変更され、内部のセルには左側に写真があり、最後のセルは「さらに読み込む」と表示され、下の大きなセルは 2 番目のセクションに変更されます。それはコレクションビューの状況によって異なります。たとえば、最初に行に 5 つの項目がある場合、それらを各セルに配置することも、1 つのビューに配置して、このビューを唯一のセルまたは headerView に追加することもできます。次に、フッターまたは最後のセルがさらに読み込まれます。
こちらの方法をご利用ください。
uitableview を uitablewview に追加したい場合は、オンラインで検索して、オープンソースのものが存在するかどうかを確認できます。見たのを覚えています。 uicollection を uitableview に追加する場合。アイデアを提案します。以前のプロジェクトでも同様の問題に遭遇したためです。あなたの考えを教えてください。
uitableview はセルの定義をサポートしているため、セルに collectionview を記述してから collectioncell を定義できます。それは確かに実現可能であり、個人的にはコードの量はそれほど多くないと感じます。データをロードするときは、毎回データがセルに渡され、コレクションビューがデータをロードします。 コードを通じてセル内の高さを計算できます。これは可能です。
コンピューターが近くにないので...コードは投稿しません。必要であればメッセージを残していただければ、月曜日に uitableview collection 用に書いたコードを投稿します。
解決策を持っている人はいますか?対立の解決を目指します。
解決策
你的情况其实仅仅一个collectionView就可以搞定了,根据数据源分组对应分几个section,展示更多时候,就修改对应section中的数据源,刷UI就好了,你所“必须”要关注的是你的CollectionView的contentSize以及如何Layout,还有优化的话考虑Cache layout类中的attributes.
入れ子になったスキーム
今日、このように collectionView のネストされた collectionView を書きました (問題を探しているだけではなく、要求されました)。そのアイデアについて話しましょう (TableView のネストも同様です。XIB/SB と純粋なコードの違いは無視してください...) )
リーリーPS:いくつか間違いがあります。CollectionView マスターが来て修正してくれるといいのですが...Orz
1) カスタムセル
collectionView をハングする必要があるセルに次のコードを貼り付けます:
2) セル内の CollectionView はセルの後に初期化されることに注意してください。つまり、セル内の CollectionView のデータ ソースとプロキシはセルを初期化した直後に設定する必要があります。そうしないとクラッシュについては説明されません。
3.1) セル内の CollectionView のデータ ソースを変更し (データのアクティブ/パッシブ変更などの変更がある場合)、CollectionView 属性を変更し (layoutAttribute が変更されます)、2 つの CollectionView を再配置します。 (tableViewはreloatに対応するindexPathです)
4) 愚痴を言い続ける: CollectionView の本質はレイアウトを書けるかどうかにあります。 。 CollectionView を使用すると、TableView に別れを告げることができますが、学習するのにある程度の時間がかかり、そうでないと使いこなすのが難しくなります。 推奨リソース:
セル内では tableView を使用しないことをお勧めします
理論的にはセルにUITableViewを追加する(外側のセルを内側のtableViewのデリゲートとして機能させる)ことは可能かもしれませんが、そのような書き方は見たことがなく、非常にまずい気がします。理由は 2 つあります:
しかし、UITableView の高さは固定されており、内部には ScrollView があります。当然、全表示ではなくスクロールに適しています。
考えられる代替手段
この要件は、上下 2 つの大きなセルを 2 つのセクションとして考えることができると思います。上の大きなセルは最初のセクションに変更され、内部のセルには左側に写真があり、最後のセルは「さらに読み込む」と表示され、下の大きなセルは 2 番目のセクションに変更されます。それはコレクションビューの状況によって異なります。たとえば、最初に行に 5 つの項目がある場合、それらを各セルに配置することも、1 つのビューに配置して、このビューを唯一のセルまたは headerView に追加することもできます。次に、フッターまたは最後のセルがさらに読み込まれます。
こちらの方法をご利用ください。
リーリーuitableview を uitablewview に追加したい場合は、オンラインで検索して、オープンソースのものが存在するかどうかを確認できます。見たのを覚えています。
uicollection を uitableview に追加する場合。アイデアを提案します。以前のプロジェクトでも同様の問題に遭遇したためです。あなたの考えを教えてください。
uitableview はセルの定義をサポートしているため、セルに collectionview を記述してから collectioncell を定義できます。それは確かに実現可能であり、個人的にはコードの量はそれほど多くないと感じます。データをロードするときは、毎回データがセルに渡され、コレクションビューがデータをロードします。
コードを通じてセル内の高さを計算できます。これは可能です。
コンピューターが近くにないので...コードは投稿しません。必要であればメッセージを残していただければ、月曜日に uitableview collection 用に書いたコードを投稿します。
解決策を持っている人はいますか?対立の解決を目指します。