1

我有一个场景,根据某些标准会有一个或两个尾随按钮。我希望按钮始终与尾部对齐以保持视觉一致性,但到目前为止,无论我做什么,它们似乎都居中对齐。

下面是一个显示这一点的最小示例:

import SwiftUI

struct ContentView: View {
    @State private var isButtonShown = true

    var body: some View {
        NavigationView {
            Button(action: {
                self.isButtonShown.toggle()
            }, label: {
                Text(self.isButtonShown ? "Hide Button" : "Show Button")
                     })
                .navigationBarItems(trailing:
                    HStack {
                        if self.isButtonShown {
                            Button(action: {
                                print("A tapped")
                            }, label: {
                                Text("A")
                            })
                            Spacer(minLength: 30)
                        }

                        Button(action: {
                            print("B tapped")
                        }, label: {
                            Text("B")
                        })
                    }
                    .frame(alignment: .trailing)
                )
        }
    }
}

还有一段视频显示了当我选择按钮时会发生什么。

在此处输入图像描述

我的目标是让 B 保持在同一位置,无论是否显示 A。

最后,我尝试了其他一些项目:

  • 移动.frame(alignment: .trailing)NavigationView水平
  • 添加了一个else之后self.isButtonShown添加了一个Spacer()
  • 适用.frame(alignment: .trailing)于 BButton
4

1 回答 1

1

这是 SwiftUI 1.0 中的已知问题

SwiftUI 2.0

基于new的解决方案.toolbar没有。使用 Xcode 12 / iOS 14 测试

演示

struct ContentView: View {
    @State private var isButtonShown = true

    var body: some View {
        NavigationView {
            Button(action: {
                self.isButtonShown.toggle()
            }, label: {
                Text(self.isButtonShown ? "Hide Button" : "Show Button")
                     })
            .toolbar {
                ToolbarItem(placement: .primaryAction) {
                    if self.isButtonShown {
                        Button(action: {
                            print("A tapped")
                        }, label: {
                            Text("A")
                        })
                    }
                }

                ToolbarItem(placement: .primaryAction) {
                    Button(action: {
                        print("B tapped")
                    }, label: {
                        Text("B")
                    })
                }
            }
        }
    }
}
于 2020-07-02T15:27:32.363 回答