The following code results in a view that does what you expect, always shows the content appearing at the bottom of the scroll view. However, if you start with an empty view and populate it with a few buttons, the tap targets for those buttons will be off until you manually scroll the view.
ScrollView {
LazyVStack {
Button(action: {}) { Text("Foo") }
...
}
}
.defaultScrollAnchor(.bottom)
Add padding to the scroll view so new content starts at the bottom.
GeometryReader { geo in
ScrollView {
LazyVStack {
Button(action: {}) { Text("Foo") }
...
}
.padding(.top, geo.size.height)
}
.defaultScrollAnchor(.bottom)
}