nun*_*123 17 authentication scrollview ios swiftui
我正在尝试在我的应用程序上编写一个简单的登录页面。我开始在我新更新的 Mac OS Catalina 上使用 SwiftUI。Apple 文档仍然缺乏很多。我需要在占据整个页面的 Scrollview 上垂直居中一个 VStack,其宽度为 400 的“限制”。
像这样的东西:
ScrollView(.vertical) {
VStack {
Text("Hello World")
}
.frame(maxWidth: 400, alignment: .center)
}
Run Code Online (Sandbox Code Playgroud)
使用 UIScrollView 很容易,只需要设置 ContentView 以填充高度和宽度,然后在内容视图中居中垂直 StackLayout 但现在使用 SwiftUI 我只是想知道..
目标是这样的(感谢作者)
如果有人想知道为什么我想要滚动视图中的所有内容,那是因为我的表单非常大,我希望用户同时使用横向和纵向视图,所以我真的需要内容可以滚动,还要记住,在 Ipad 中表单不会填满整个屏幕,这就是我希望它垂直居中的原因。
Ahm*_*san 31
我已经根据@Alex 的回答构建了一个更通用的视图
/// Custom vertical scroll view with centered content vertically
///
struct VScrollView<Content>: View where Content: View {
@ViewBuilder let content: Content
var body: some View {
GeometryReader { geometry in
ScrollView(.vertical) {
content
.frame(width: geometry.size.width)
.frame(minHeight: geometry.size.height)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样在应用程序中的任何位置使用它
var body: some View {
VScrollView {
VStack {
Text("YOUR TEXT HERE")
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*son 25
您可以通过使用GeometryReader获取父视图的尺寸并将滚动视图的内容设置为父视图minHeight的高度来垂直居中滚动视图中的内容。
当内容太大而无法垂直放置时,它会像平常一样滚动。
例如:
var body: some View {
GeometryReader { geometry in // Get the geometry
ScrollView(.vertical) {
VStack {
Text("Form goes here")
.frame(maxWidth: 400) // Set your max width
}
.padding()
.background(Color.yellow)
.frame(width: geometry.size.width) // Make the scroll view full-width
.frame(minHeight: geometry.size.height) // Set the content’s min height to the parent
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3892 次 |
| 最近记录: |