目的・役割

キーワード・タグ・期間などでランキングを絞り込んで発見する画面。Tab.search のメイン画面。

UI 構成

要素種類説明
検索バーSearchFieldtitle / description にマッチ
タグフィルターPicker / FlowLayout主タグ・副タグでフィルタ
ステータスフィルターPickerすべて / 受付中 / 終了
並び順Picker新着 / 人気(voteCount降順) / 終了間近
結果リストListRankingCardView(後述のレイアウト刷新版)
RankingCardView レイアウトVStack ・右上に大きめランクバッジ(32px円、Sは虹グラデ)
・投票タイプバッジ(シングル / TOP3)をタグ群の上に配置
・大タグ・小タグを別行で表示
・左下に作成者アイコン + 表示名(匿名は別表記)
・クイズ通過バッジは hasQuiz=true のみ
バナー広告共通配置MainTabView の safeAreaInset(.bottom) でタブバー直上に配置(プレミアム時は非表示)。検索画面個別の広告領域は持たない

状態

状態表示内容
検索前人気ランキング・最近のランキング
検索中ProgressView
結果ありカードリスト
結果なし「該当するランキングがありません」

遷移

操作遷移先
カードタップRankingDetailView
タグタップ同画面(タグフィルタON)

使用するデータモデル

// SearchViewModel が保持
struct SearchCriteria {
    var keyword: String
    var majorTag: String?
    var minorTag: String?
    var status: RankingStatus?
    var sortBy: SortOrder  // newest / popular / endingSoon
}

実装メモ

関連

変更履歴

バージョン日付変更内容
1.02026-05-09初版作成
1.12026-05-10RankingCardView レイアウト刷新(右上ランクバッジ・投票タイプバッジ・タグ縦並び・作成者表示・クイズ通過バッジ条件表示)/バナー広告を MainTabView 共通配置へ移動