如何将视图固定到屏幕边缘?

Posted

技术标签:

【中文标题】如何将视图固定到屏幕边缘?【英文标题】:How do I pin a view to the edges of a screen? 【发布时间】:2019-06-08 21:28:44 【问题描述】:

如何使用SwiftUI 将视图(在本例中为标签/文本)固定到屏幕边缘?对于 Storyboard,我只会使用 AutoLayout,但 SwiftUI 不可用。

【问题讨论】:

【参考方案1】:

你可以这样做

    VStack 
        HStack 
            Text("Label")
            Spacer()
        
        Spacer()
    

Spacer in VStack 将确保 HStack 位于顶部,Spacer in HStack 将确保 Text 位于左侧。你也可以通过对齐来解决这个问题。

【讨论】:

【参考方案2】:

您可以将主要内容包装在一个名为GeometryReader 的特殊容器中。它的默认大小与其父视图相同,因此如果它是根视图,它会将内容固定到屏幕边缘,如 AutoLayout。

GeometryReader  in geometry
    YourContentView().frame(width: geometry.size.width, height: geometry.size.height)

【讨论】:

【参考方案3】:

如果有人在这里想办法从顶部固定视图 x 个点,您可以这样做:

VStack 
        Spacer()
            .frame(height: 40)
        Text("Space me")
        Spacer()
    

您将需要两个垫片。如果您来自 Auto Layout,这可能有点违反直觉,但实际上非常方便。 VStack 底部的垫片会将 VStack 视图从默认(即居中)y 位置“推”向顶部,直到遇到阻力——默认情况下是安全区域的顶部边缘。然后,您可以使用顶部垫片将静止点向下推 x 点,从而产生与自动布局的顶部约束类似的效果。

【讨论】:

您可以通过填充来做到这一点。您不需要垫片。【参考方案4】:

在你的视图上使用这个修饰符

  .frame(minWidth: 0, maxWidth: .infinity,
         minHeight: 0, maxHeight: .infinity)

SwiftUI 使用任何视图所需的最小空间,要增加它,您可以根据情况使用不同的方法。 也可以使用 relativeSize() 修饰符,但是当它起作用时我还没有得到

【讨论】:

透明背景上的变化你想怎么看?:) 在frame修饰符后面调用背景修饰符改变颜色)

以上是关于如何将视图固定到屏幕边缘?的主要内容,如果未能解决你的问题,请参考以下文章

如何将视图移动到屏幕的最近边缘?

图像视图autolayout从水平边缘固定到60pt,但自动刻度高度?

如何让 UIImageView 的边缘捕捉到屏幕的边缘(超级视图)?

如何在滚动时隐藏导航栏,除非在屏幕顶部

NSLayoutConstraint 将视图固定到父视图的底部边缘

如何使用自动布局将图像彼此水平对齐