Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在包含GeometryReader的视图中使用.firstTextBaseline对齐_Swift_Swiftui_Geometryreader - Fatal编程技术网

Swift 如何在包含GeometryReader的视图中使用.firstTextBaseline对齐

Swift 如何在包含GeometryReader的视图中使用.firstTextBaseline对齐,swift,swiftui,geometryreader,Swift,Swiftui,Geometryreader,我在HStack中有两个视图-左侧是一个简单的Text视图 为了获得正确的视图,我正在尝试使用GeometryReader。当我使用geometry reader时,我无法对齐文本的基线,但当我不使用它时,我可以对齐 下面是一些代码: struct CompositeView : View { var body : some View { VStack { Button(action: { }) {

我在
HStack
中有两个视图-左侧是一个简单的
Text
视图

为了获得正确的视图,我正在尝试使用GeometryReader。当我使用geometry reader时,我无法对齐文本的基线,但当我不使用它时,我可以对齐

下面是一些代码:

struct CompositeView : View {
    var body : some View {
        VStack {
            Button(action: {
            }) {
                Text("Another text")
                    .padding(5)
                    .overlay(RoundedRectangle(cornerRadius: 5).stroke(Color.blue, lineWidth: 2.0))
            }
        }
    }
}

struct GeometryReaderTest : View {
    var tags: [String]

    init(tags : [String]) {
        self.tags = tags
    }

    @State private var viewHeight = CGFloat.zero

    var body: some View {
        VStack {
            GeometryReader { geometry in
                ZStack {
                    ForEach(self.tags, id: \.self) { tag in
                        Button(action: {}) {
                            Text(tag)
                                .padding(5)
                                .overlay(RoundedRectangle(cornerRadius: 5).stroke(Color.blue, lineWidth: 2.0))
                        }
                    }
                }
                .background(getHeight(self.$viewHeight))
            }
        }
        .frame(height: viewHeight)
    }
    
    /// Get the height of the Geometry view
    ///
    private func getHeight(_ height: Binding<CGFloat>) -> some View {
        return GeometryReader { geometry -> Color in
            let rect = geometry.frame(in: .local)
            DispatchQueue.main.async {
                height.wrappedValue = rect.size.height
            }
            return .clear
        }
    }
}

struct MyTestView : View {
    var body : some View {
        VStack {
            HStack (alignment: .firstTextBaseline) {
                ZStack {
                    Text("Hello")
                }
                GeometryReaderTest(tags: ["One"])
            }
            HStack (alignment: .firstTextBaseline) {
                ZStack {
                    Text("Hello")
                }
                CompositeView()
            }
        }
    }
}
struct CompositeView:视图{
var body:一些观点{
VStack{
按钮(操作:{
}) {
文本(“另一文本”)
.填充(5)
.overlay(圆角矩形(拐角半径:5).笔划(颜色:蓝色,线宽:2.0))
}
}
}
}
结构GeometryReaderTest:视图{
变量标记:[字符串]
初始化(标记:[字符串]){
self.tags=标记
}
@国家私有变量viewHeight=CGFloat.zero
var body:一些观点{
VStack{
GeometryReader{中的几何体
ZStack{
ForEach(self.tags,id:\.self){tagin
按钮(操作:{}){
文本(标记)
.填充(5)
.overlay(圆角矩形(拐角半径:5).笔划(颜色:蓝色,线宽:2.0))
}
}
}
.background(getHeight(self.$viewHeight))
}
}
.框架(高度:视图高度)
}
///获取几何体视图的高度
///
private func getHeight(height:Binding)->一些视图{
返回GeometryReader{geometry->Color in
设rect=geometry.frame(in:.local)
DispatchQueue.main.async{
height.wrappedValue=rect.size.height
}
返回,完毕
}
}
}
结构MyTestView:View{
var body:一些观点{
VStack{
HStack(路线:.firstTextBaseline){
ZStack{
文本(“你好”)
}
GeometryReaderTest(标记:[“一”])
}
HStack(路线:.firstTextBaseline){
ZStack{
文本(“你好”)
}
复合视图()
}
}
}
}
结果如下:

如您所见,当右侧视图为GeometryReader时,基线对齐不起作用,但当右侧视图为简单按钮时,基线对齐起作用

有人知道我怎样才能把基线排好吗

我之所以使用GeometryReader,是因为我的右视图最终会变得更加复杂——我将面临的问题减少到尽可能小的程度

谢谢大家!

下一步应该是有帮助的。