Agent skills for iOS, iPadOS, Swift, SwiftUI, and modern Apple framework development.
71
89%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Advisory
Suggest reviewing before use
Use List for feed-style content and settings-style rows where built-in row reuse, selection, and accessibility matter.
List for long, vertically scrolling content with repeated rows.Section headers to group related rows.ScrollPosition with .scrollPosition($scrollPosition) for scroll-to-top or jump-to-id..listStyle(.plain) for modern feed layouts..listStyle(.grouped) for multi-section discovery/search pages where section grouping helps..scrollContentBackground(.hidden) + a custom background when you need a themed surface..listRowInsets(...) and .listRowSeparator(.hidden) to tune row spacing and separators..environment(\.defaultMinListRowHeight, ...) to control dense list layouts.@MainActor
struct TimelineListView: View {
@Environment(\.selectedTabScrollToTop) private var selectedTabScrollToTop
@State private var scrollPosition = ScrollPosition(idType: String.self)
var body: some View {
List {
ForEach(items) { item in
TimelineRow(item: item)
.id(item.id)
.listRowInsets(.init(top: 12, leading: 16, bottom: 12, trailing: 16))
.listRowSeparator(.hidden)
}
}
.listStyle(.plain)
.environment(\.defaultMinListRowHeight, 1)
.scrollPosition($scrollPosition)
.onChange(of: selectedTabScrollToTop) {
withAnimation {
scrollPosition.scrollTo(edge: .top)
}
}
}
}@MainActor
struct SettingsView: View {
var body: some View {
List {
Section("General") {
NavigationLink("Display") { DisplaySettingsView() }
NavigationLink("Haptics") { HapticsSettingsView() }
}
Section("Account") {
Button("Sign Out", role: .destructive) {}
}
}
.listStyle(.insetGrouped)
}
}List for dynamic feeds, settings, and any UI where row semantics help..contentShape(Rectangle()) on rows that should be tappable end-to-end..refreshable for pull-to-refresh feeds when the data source supports it.Apply edge effects to lists for modern scroll behavior:
List {
// rows
}
.scrollEdgeEffectStyle(.soft, for: .top)See scrollview.md for the full scroll edge effect and backgroundExtensionEffect() API reference.
List row; use ScrollView + LazyVStack instead.List and nested ScrollView; it can cause gesture conflicts.skills
accessorysetupkit
references
activitykit
references
adattributionkit
references
alarmkit
references
app-clips
app-intents
references
app-store-optimization
app-store-review
apple-on-device-ai
appmigrationkit
references
audioaccessorykit
references
authentication
references
avkit
references
background-processing
references
browserenginekit
references
callkit
references
carplay
references
cloudkit
references
contacts-framework
references
core-bluetooth
references
core-data
core-motion
references
core-nfc
references
coreml
references
cryptokit
references
cryptotokenkit
references
debugging-instruments
device-integrity
references
dockkit
references
energykit
references
eventkit
references
financekit
references
focus-engine
gamekit
references
healthkit
references
homekit
references
ios-accessibility
ios-localization
ios-networking
ios-simulator
references
mapkit
metrickit
references
musickit
references
natural-language
references
paperkit
references
passkit
references
pdfkit
references
pencilkit
references
permissionkit
references
photokit
push-notifications
realitykit
references
relevancekit
references
scenekit
references
sensorkit
references
speech-recognition
spritekit
references
storekit
swift-api-design-guidelines
swift-architecture
swift-charts
references
swift-codable
swift-concurrency
swift-formatstyle
swift-language
swift-security
references
swift-testing
swiftdata
swiftlint
swiftui-animation
swiftui-gestures
references
swiftui-layout-components
swiftui-liquid-glass
references
swiftui-patterns
swiftui-performance
swiftui-uikit-interop
swiftui-webkit
tabletopkit
references
tipkit
references
vision-framework
weatherkit
references
widgetkit
references