diff --git a/StockMonitor/Views/DropdownView.swift b/StockMonitor/Views/DropdownView.swift index cbc0a28..fa59a4e 100644 --- a/StockMonitor/Views/DropdownView.swift +++ b/StockMonitor/Views/DropdownView.swift @@ -5,6 +5,7 @@ struct DropdownView: View { @State private var showSettings = false @State private var sortByChange = false @State private var selectedStock: Stock? = nil + @State private var lastSelectedStockId: String? = nil private var groupedStocks: [(Market, [Stock])] { [Market.aStock, .hkStock, .usStock].compactMap { market in @@ -49,17 +50,29 @@ struct DropdownView: View { .frame(maxWidth: .infinity) .padding() } else { - ScrollView { - VStack(alignment: .leading, spacing: 6) { - ForEach(groupedStocks, id: \.0) { market, stocks in - StockGroupView(market: market, stocks: stocks, - onSelect: { selectedStock = $0 }) + ScrollViewReader { proxy in + ScrollView { + VStack(alignment: .leading, spacing: 6) { + ForEach(groupedStocks, id: \.0) { market, stocks in + StockGroupView(market: market, stocks: stocks, + onSelect: { + lastSelectedStockId = $0.id + selectedStock = $0 + }) + } + } + .padding(.horizontal, 6) + } + .scrollIndicators(.never) + .frame(maxHeight: 520) + .onAppear { + if let id = lastSelectedStockId { + DispatchQueue.main.async { + proxy.scrollTo(id, anchor: .center) + } } } - .padding(.horizontal, 6) } - .scrollIndicators(.never) - .frame(maxHeight: 520) } Divider() diff --git a/StockMonitor/Views/StockGroupView.swift b/StockMonitor/Views/StockGroupView.swift index 12f902a..8aaa36d 100644 --- a/StockMonitor/Views/StockGroupView.swift +++ b/StockMonitor/Views/StockGroupView.swift @@ -31,6 +31,7 @@ struct StockGroupView: View { ForEach(stocks) { stock in StockRowView(stock: stock, quote: appState.quotes[stock.id], onTap: { onSelect?(stock) }) + .id(stock.id) } } }