Swiftui Grid Mayout с пользовательскими стилями.
Open GridDemo.xcodeproj для получения дополнительных примеров для iOS, MacOS, WatchOS и TVOS

ScrollView {
Grid ( colors ) {
Rectangle ( )
. foregroundColor ( $0 )
}
}
. gridStyle (
ModularGridStyle ( columns : . min ( 100 ) , rows : . fixed ( 100 ) )
)
ScrollView {
Grid ( 1 ... 69 , id : . self ) { index in
Image ( " ( index ) " )
. resizable ( )
. scaledToFit ( )
}
}
. gridStyle (
StaggeredGridStyle ( . horizontal , tracks : 8 , spacing : 4 )
) Настройки треков позволяют настроить поведение сетки к вашему конкретному вазу использования. Как модульная, так и ошеломленная сетка используют значение треков для расчета макета. В модульной компоновке обе столбцы и ряды являются треками.
public enum Tracks : Hashable {
case count ( Int )
case fixed ( CGFloat )
case min ( CGFloat )
}Сетка разделена на равные доли размера, предоставляемые родительским представлением.
ModularGridStyle ( columns : 3 , rows : 3 )
StaggeredGridStyle ( tracks : 8 )Размер предмета фиксируется до определенной ширины или высоты.
ModularGridStyle ( columns : . fixed ( 100 ) , rows : . fixed ( 100 ) )
StaggeredGridStyle ( tracks : . fixed ( 100 ) )AutoLayout, уважая мин ширины или высоты.
ModularGridStyle ( columns : . min ( 100 ) , rows : . fixed ( 100 ) )
StaggeredGridStyle ( tracks : . min ( 100 ) ) Получить размер и позицию с предпочтениями
struct CardsView : View {
@ State var selection : Int = 0
var body : some View {
ScrollView {
Grid ( 0 ..< 100 ) { number in
Card ( title : " ( number ) " )
. onTapGesture {
self . selection = number
}
}
. padding ( )
. overlayPreferenceValue ( GridItemBoundsPreferencesKey . self ) { preferences in
RoundedRectangle ( cornerRadius : 16 )
. strokeBorder ( lineWidth : 4 )
. foregroundColor ( . white )
. frame (
width : preferences [ self . selection ] . width ,
height : preferences [ self . selection ] . height
)
. position (
x : preferences [ self . selection ] . midX ,
y : preferences [ self . selection ] . midY
)
. animation ( . linear )
}
}
}
} Не стесняйтесь вносить свой вклад через запрос на вилку/вытягивание в Master Branch. Если вы хотите запросить функцию или сообщить об ошибке, пожалуйста, запустите новую проблему.
Если вы найдете этот проект полезным, пожалуйста, подумайте о том, чтобы стать моим спонсором GitHub.