微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在始终位于HStack中心的Spacers之间进行查看?

如何解决如何在始终位于HStack中心的Spacers之间进行查看?

我想实现的目标。不管两侧的文本宽度的宽度如何,按钮都应始终位于HStack的中心。

enter image description here

HStack {
    Text("Foooooooo")
    Spacer(minLength: 5)
    Button(action: { }) {
        Text("Bar")
    }
    Spacer()
    Text("Baz")
}
.font(.system(size: 16,weight: .heavy,design: .rounded))
.padding()

enter image description here

我还尝试使用GeometryReader并为视图中的每个TextButton设置帧大小,但是存在两个问题,

  1. GeometryReader返回的视图将占据父级提供给它的整个视图,而不是实际的固有内容大小,该空间仅足以容纳TextSpacer和{{1 }}
  2. 一个Button内的字符串不能左对齐,所以最后一个Text内的字符串不能右对齐

解决方法

您想布局三个大小相同但大小可变的元素,但是您有三个大小固定但不同的元素。要解决此问题,请将每个元素放入其自己的灵活堆栈(带有分隔符的HStack)中,以便每个元素获得1/3的空间。在每个堆栈中,使用空格键对齐。

    HStack {
        // Left stack
        HStack {
            Text("Foooooooo")
            Spacer()
        }

        // Center stack. The surrounding Spacers aren't really required in this
        // specific case,but added for consistency and to show how to center.
        HStack {
            Spacer()
            Button(action: { }) {
                Text("Bar")
            }
            Spacer()
        }

        // Right stack
        HStack {
            Spacer()
            Text("Baz")
        }
    }
    .font(.system(size: 16,weight: .heavy,design: .rounded))
    .padding()
,

这里是您可能的解决方法。使用Xcode 12 / iOS 14准备和测试的演示

demo

    HStack {
        Spacer()
            .overlay(Text("Foooooooo"),alignment: .leading)

        Button(action: { }) {
            Text("Bar")
        }

        Spacer()
            .overlay(Text("Baz"),alignment: .trailing)
    }
    .font(.system(size: 16,design: .rounded))
    .padding()
,

这是另一种简洁的方法,它使用 $phoneDetails->toGoSubscription($deviceDetails->id)->get(); 将居中的按钮和ZStack与一个HStack组合在一起,以将标签推到边缘:

Spacer

注意:如果您知道标签不会侵害按钮,则此解决方案有效 。 @Asperi的解决方案导致多余的标签被ZStack { HStack { Text("Foooooooo") Spacer() Text("Baz") } Button(action: { }) { Text("Bar") } } .font(.system(size: 16,design: .rounded)) .padding() 截断。 @RobNapier的解决方案使超长标签以宽度的1/3包裹。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?