繁体   English   中英

如何在 SwiftUI 中对齐 GeometryReader?

[英]How to Align GeometryReader in SwiftUI?

我正在尝试使用 GeometryReader 创建一个视图,然后在 ContentView 中使用它,但是无论我做了什么更改,我都无法使使用 GeometryReader 创建的视图对齐到中心,任何人都可以建议我需要在哪里进行更改,谢谢

我使用 GeometryReader 的视图

import SwiftUI

struct DiceView: View {
    let randomNumber = Int.random(in: 400...1000)
    @Binding var randomRoll: Int
    
    var body: some View {
     
        GeometryReader { geo in
                Text("\(randomRoll)")
                    .font(.title)
                    .padding(.horizontal)
                    .background(
                Rectangle()
                        .foregroundColor(Color(hue: min(1, geo.frame(in: .global).minY/CGFloat(randomNumber) ), saturation: 1, brightness: 1))
                        .frame(minWidth: 120, minHeight: 120)
                    
                    .cornerRadius(10))
            
            }
       
        .frame(height: 150)
    }

}

我在哪里使用它

import SwiftUI

struct DiceRoller: View {

    let columns = [
               GridItem(.flexible()),
               GridItem(.flexible()),
               GridItem(.flexible()),
       ]
    
   @State private var number = 9
   @State private var type = (1...10).map { _ in Int.random(in: 1...10)}
   @State var total = [Int]()
    var body: some View {
        LazyVGrid(columns: columns,  spacing: 10) {
            ForEach(0..<number, id: \.self) { item in
                
                DiceView(randomRoll: $type[item])
                    .onAppear {
                        total.append(type[item])
                    }
 
                }
            
            Text("\(total.reduce(0, +))")
               
            
                    }
      
        .padding(.horizontal)
    }
}

我在屏幕上看到的

在此处输入图像描述

看起来您将.frame修饰符放置在错误的位置(修饰符的放置很重要)

这是修改后的代码(假设我理解您的意图)

演示

var body: some View {
    GeometryReader { geo in
        Text("\(randomRoll)")
            .font(.title)
            .padding(.horizontal)
            .frame(maxWidth: .infinity, maxHeight: .infinity) // << before background !!
            .background(
                Rectangle()
                    .foregroundColor(Color(hue: min(1, geo.frame(in: .global).minY/CGFloat(randomNumber) ), saturation: 1, brightness: 1))
                    .cornerRadius(10))
        
    }
    .frame(height: 150)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM