SwiftUI:滚动视图中的中心内容

SwiftUI:滚动视图中的中心内容,swiftui,Swiftui,我试图在SwiftUI中的VStack滚动视图中集中一组视图。为了简化事情,我只是想让它使用一个文本视图。以下是我到目前为止的想法: var body: some View { ScrollView(alwaysBounceVertical: true){ HStack(alignment: .center) { Spacer() Text("This Is a Test") Spacer() } //HStack

我试图在SwiftUI中的
VStack
滚动视图中集中一组视图。为了简化事情,我只是想让它使用一个
文本
视图。以下是我到目前为止的想法:

var body: some View {
  ScrollView(alwaysBounceVertical: true){
    HStack(alignment: .center) {
      Spacer()
      Text("This Is a Test")
      Spacer()
    } //HStack
    .background(Color.green)
  } //ScrollView
  .background(Color.gray)
}
这导致:

我希望文本在中间是这样的:


因此,
HStack
应为全宽,
文本应居中。看起来这应该很容易,但我不明白我做错了什么

使用GeometryReader,可以获得有关包含视图大小的信息,并使用该信息调整视图大小

    var body: some View {
        GeometryReader { geometry in                <--- Added
            ScrollView(alwaysBounceVertical: true){
                HStack(alignment: .center) {
                    Spacer()
                    Text("This Is a Test")
                    Spacer()
                } //HStack
                .frame(width: geometry.size.width)  <--- Added
                .background(Color.green)
            } //ScrollView
        .background(Color.gray)
    }
}
var主体:一些视图{

几何导引头{geometry in这似乎是Xcode 11.0 beta版中的一个bug,
ScrollView
内容无法填充滚动视图。如果将
ScrollView
替换为
List
,它将按预期工作。但如果必须使用滚动视图,一个解决方法是修复滚动视图的内容宽度

因此,您的代码将如下所示:

ScrollView(alwaysBounceVertical: true) {
  HStack(alignment: .center) {
    Spacer()
    Text("This Is a Test")
    Spacer()
  } // HStack
  .frame(width: UIScreen.main.bounds.width) // set a fixed width
  .background(Color.green)
} // ScrollView
.background(Color.gray)
结果:


您应该使用修饰符
frame
并设置其
最大宽度:
。 所以它告诉它的父母:“越宽越好”:

var主体:一些视图{
滚动视图(.vertical,showsIndicators:true){
HStack(对齐:。中心){
垫片()
文本(“这是一个测试”)

.frame(最大宽度:。无穷大)//请使用
GeometryReader
而不是
UIScreen
bounds@MatteoPacini这是为什么?是因为旋转设备时它不工作吗?这个解决方案可行,但现在我正在讨论设置
.frame
和使用
GeometryReady
。谢谢!这听起来是一个很好的解释。但是应该这样吗可能无法限制scrollview的一个滚动方向来解决此类问题?我使用的是Xcode beta 5,您的代码与我配合得很好。您使用的是哪种Xcode?因为在beta 5中,scrollview没有alwaysBounceVertical修饰符。scrollview没有alwaysBounceVertical的构造函数方法。@ErkamKUCET已修复
var body: some View {
  ScrollView(.vertical, showsIndicators: true){
    HStack(alignment: .center) {
      Spacer()
      Text("This Is a Test")
        .frame(maxWidth: .infinity) // <- this
      Spacer()
    } //HStack
    .background(Color.green)
  } //ScrollView
  .background(Color.gray)
}