ランキング一覧(受付中・終了済)の閲覧と検索エントリポイント
ユーザーが投票・閲覧できるランキングを発見する起点画面。受付中(active)と終了済(ended)を切り替えて表示。
| 要素 | 種類 | 説明 |
|---|---|---|
| NavigationBar | 固定 | タイトル「ランスタ」、右上に通知ベル |
| フィードPicker | Picker (segmented) | 「受付中 / 終了済」切り替え |
| ランキングカードリスト | List | RankingCardView(後述のレイアウト刷新版) |
| RankingCardView レイアウト | VStack |
・右上に大きめランクバッジ(32px円、Sは虹グラデ、A〜Gは色分け) ・投票タイプバッジ(シングル: グレー / TOP3: 淡い緑 GRN002)をタグ群の上部に配置 ・大タグ・小タグを別行で表示(縦並び) ・左下に作成者アイコン + 表示名(匿名投稿時は「匿名」表記に切替) ・クイズ通過バッジは hasQuiz=true の場合のみ表示
|
| 未読バッジ | NotificationBadge | 通知ベルアイコン上部 |
| 引き下げリフレッシュ | refreshable | 最新化トリガー |
| バナー広告 | 共通配置 | MainTabView の safeAreaInset(.bottom) でタブバー直上に配置されるため、ホーム個別の広告領域は持たない(プレミアム時は非表示) |
| 状態 | 表示内容 |
|---|---|
| 初期表示 | ローディングインジケータ |
| データあり | ランキングカードリスト |
| データなし | 「現在表示できるランキングはありません」 |
| ネットワークエラー | 「再読み込み」ボタン付きエラー表示 |
| 操作 | 遷移先 |
|---|---|
| カードタップ | RankingDetailView |
| 通知ベルタップ | NotificationListView |
| Pickerで Active/Ended 切替 | 同画面でリスト再読込 |
Ranking {
let id: UUID
var title: String
var majorTag: String
var voteCount: Int
var voteTier: VoteTier // G〜S
var status: RankingStatus // active / ended
var startsAt: Date
var endsAt: Date
}
safeAreaInset(.bottom) に共通配置(全タブ共通・プレミアム時非表示)| バージョン | 日付 | 変更内容 |
|---|---|---|
| 1.0 | 2026-05-09 | 初版作成 |
| 1.1 | 2026-05-10 | RankingCardView レイアウト刷新(右上ランクバッジ・投票タイプバッジ・タグ縦並び・作成者表示・クイズ通過バッジ条件表示)/バナー広告を MainTabView 共通配置へ移動/scenePhase=.active 復帰時のログインボーナス判定を追記 |