Categories
Release notes

Vulcan 2.12 improves the generated code for grid cells

Vulcan 2.12 enhances the generated code for the cell views of LazyVGrid and LazyHGrid, utilizing modern APIs to minimize boilerplate code, create dynamic interfaces, and leverage native styling.

GroupBox and Label in grid cells

Grid cells now use the GroupBox and Label views to take advantage of native styling and spacing, reducing the need for explicit layout code and view modifiers.

struct Cell: View {
	let headline: String
	let caption: String
	let systemImage: String

	var body: some View {
		GroupBox {
			Text(caption)
				.font(.caption)
				.multilineTextAlignment(.center)
		} label: {
			Label {
				Text(headline)
			} icon: {
				Image(systemName: systemImage)
					.circular()
			}
			.labelStyle(.gridCell)
		}
	}
}

The GroupBox layout is controlled by a style that can easily be customized or replaced.

struct GridCellLabelStyle: LabelStyle {
	func makeBody(configuration: Configuration) -> some View {
		VStack(alignment: .center, spacing: 8.0) {
			configuration.icon
			configuration.title
		}
		.frame(maxWidth: .infinity)
	}
}

extension LabelStyle where Self == GridCellLabelStyle {
	static var gridCell: GridCellLabelStyle {
		GridCellLabelStyle()
	}
}

Updated Xcode project format

Exported projects now use the Xcode 26 format, replacing groups with folders.