Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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
Ios 理解SwiftUI的显式对齐_Ios_Swift_Swiftui - Fatal编程技术网

Ios 理解SwiftUI的显式对齐

Ios 理解SwiftUI的显式对齐,ios,swift,swiftui,Ios,Swift,Swiftui,在SwiftUI中使用的目的是什么? 我不明白这与普通的“隐式”指南有什么不同。 文件说: 返回此视图中给定对齐指南的显式值,如果不存在此类值,则返回nil 从中,我可以看到显式指南是我使用 public func alignmentGuide(g:HorizontalAlignment,computeValue:@escaping(ViewDimensions)->CGFloat)->一些视图 方法。 但是,我无法理解如何使用此值从外部范围对齐视图 是否有一个示例来说明此“明确的”对齐指南在

在SwiftUI中使用的目的是什么? 我不明白这与普通的“隐式”指南有什么不同。 文件说:

返回此视图中给定对齐指南的显式值,如果不存在此类值,则返回
nil

从中,我可以看到显式指南是我使用

public func alignmentGuide(g:HorizontalAlignment,computeValue:@escaping(ViewDimensions)->CGFloat)->一些视图
方法。 但是,我无法理解如何使用此值从外部范围对齐视图

是否有一个示例来说明此“明确的”对齐指南在实践中是如何工作的?

1)对齐指南始终存在。容器定义布局引擎应使用哪些内部视图的对齐辅助线来对齐容器内的视图

2) 如果不使用对齐guile,则布局引擎将使用隐式/默认值

3) 只要使用视图的修改器
.alignmentGuide()
,就会引入显式对齐指南

下面是一个带有顶部前导对齐的
ZStack
示例,其中有两个
文本视图

默认/隐式大小写:两个文本都对齐到顶部和左侧(顶部=0,前导=0),所以第二个文本与第一个文本重叠(因为这是ZStack)

显式案例:我们不喜欢重叠文本,希望第二个文本低于第一个文本,并按照指定相对于第一个文本进行移动

和容器,即ZStack,在默认情况下紧紧围绕着消耗最多的内部空间

在参考主题中,您可以找到仅使用对齐指南可以完成的操作


还有许多其他真实示例

在您的示例中,显式对齐指南与隐式对齐指南具有相同的效果。换句话说,如果显式指南被替换为
.alignmentGuide(.leading){$0[.top]/2}
我们会得到相同的结果。这是iOS中的一个bug吗?我希望这个隐式对齐指南返回系统提供的原始指南?
struct DemoImplicitAlignment: View {
    var body: some View {
        ZStack(alignment: .topLeading) {
            Text("First").border(Color.green)
            Text("Second").border(Color.red)
        }
    }
}
struct DemoExplicitAlignment: View {
    var body: some View {
        ZStack(alignment: .topLeading) {
            Text("First").border(Color.green)

            Text("Second").border(Color.red)
                // now my top alignment guide shifted from implicit/default one
                // on specified constant, so I have space above self
                .alignmentGuide(.top) { $0[.top] - 40 }
                // now my leading alignment guild shifted based on above
                // explicit own top alignment guide, so I have variation
                // free space ahead of self
                .alignmentGuide(.leading) { $0[explicit: .top]! / 2 }
        }
    }
}