Nib provides alignment enums that control how views are positioned within their containers. Each enum maps directly to a SwiftUI alignment type.
HorizontalAlignment¶
Controls horizontal alignment of children within a VStack.
| Value | SwiftUI Equivalent | Description |
|---|---|---|
HorizontalAlignment.LEADING |
.leading |
Align children to the left (LTR) or right (RTL) edge. |
HorizontalAlignment.CENTER |
.center |
Center children horizontally (default). |
HorizontalAlignment.TRAILING |
.trailing |
Align children to the right (LTR) or left (RTL) edge. |
import nib
nib.VStack(
controls=[
nib.Text("Left-aligned title"),
nib.Text("Left-aligned body"),
],
alignment=nib.HorizontalAlignment.LEADING,
spacing=4,
)
VerticalAlignment¶
Controls vertical alignment of children within an HStack.
| Value | SwiftUI Equivalent | Description |
|---|---|---|
VerticalAlignment.TOP |
.top |
Align children to the top edge. |
VerticalAlignment.CENTER |
.center |
Center children vertically (default). |
VerticalAlignment.BOTTOM |
.bottom |
Align children to the bottom edge. |
import nib
nib.HStack(
controls=[
nib.Text("Label", font=nib.Font.CAPTION),
nib.Text("Value", font=nib.Font.TITLE),
],
alignment=nib.VerticalAlignment.BOTTOM,
spacing=8,
)
Alignment¶
Combined two-dimensional alignment for ZStack and the frame modifier. Specifies both horizontal and vertical alignment simultaneously.
| Value | SwiftUI Equivalent | Description |
|---|---|---|
Alignment.TOP_LEADING |
.topLeading |
Top-left corner. |
Alignment.TOP |
.top |
Top edge, centered horizontally. |
Alignment.TOP_TRAILING |
.topTrailing |
Top-right corner. |
Alignment.LEADING |
.leading |
Left edge, centered vertically. |
Alignment.CENTER |
.center |
Center of the view (default). |
Alignment.TRAILING |
.trailing |
Right edge, centered vertically. |
Alignment.BOTTOM_LEADING |
.bottomLeading |
Bottom-left corner. |
Alignment.BOTTOM |
.bottom |
Bottom edge, centered horizontally. |
Alignment.BOTTOM_TRAILING |
.bottomTrailing |
Bottom-right corner. |
import nib
# Badge in the top-right corner of a ZStack
nib.ZStack(
controls=[
nib.Rectangle(fill="#333", width=200, height=100, corner_radius=12),
nib.Text(
"3",
font=nib.Font.CAPTION,
foreground_color=nib.Color.WHITE,
background=nib.Color.RED,
padding={"horizontal": 6, "vertical": 2},
corner_radius=8,
),
],
alignment=nib.Alignment.TOP_TRAILING,
)
ScrollAxis¶
Controls the scroll direction for ScrollView containers.
| Value | SwiftUI Equivalent | Description |
|---|---|---|
ScrollAxis.VERTICAL |
.vertical |
Scroll vertically (default). |
ScrollAxis.HORIZONTAL |
.horizontal |
Scroll horizontally. |
ScrollAxis.BOTH |
[.vertical, .horizontal] |
Scroll in both directions. |
import nib
# Vertical scrolling list
nib.ScrollView(
controls=[nib.Text(f"Item {i}") for i in range(50)],
axis=nib.ScrollAxis.VERTICAL,
)
# Horizontal scrolling row
nib.ScrollView(
controls=[
nib.Rectangle(fill="blue", width=100, height=100, corner_radius=8)
for _ in range(10)
],
axis=nib.ScrollAxis.HORIZONTAL,
)
Examples¶
Combining alignments in a layout¶
import nib
def main(app: nib.App):
app.build(
nib.VStack(
controls=[
# Header aligned to leading edge
nib.Text("My App", font=nib.Font.LARGE_TITLE),
# Content in a ZStack with alignment
nib.ZStack(
controls=[
nib.Rectangle(
fill="#1E1E1E",
width=250,
height=150,
corner_radius=12,
),
nib.Text(
"Centered",
foreground_color=nib.Color.WHITE,
),
],
alignment=nib.Alignment.CENTER,
),
# Footer row aligned to bottom
nib.HStack(
controls=[
nib.Text("v1.0", font=nib.Font.CAPTION),
nib.Spacer(),
nib.Text("Status: OK", font=nib.Font.CAPTION),
],
alignment=nib.VerticalAlignment.BOTTOM,
),
],
alignment=nib.HorizontalAlignment.LEADING,
spacing=12,
padding=16,
)
)
nib.run(main)