如何在SwiftUI中将视图相对于左上角定位

时间:2020-04-29 03:35:05

标签: ios view position swiftui

如何在swiftUI中相对于视图的左上角放置视图? “位置”修饰符相对于其中心坐标移动视图。因此,.position(x: 0, y: 0)在屏幕的左上方放置了一个视图中心坐标。

我想在屏幕的左上方放置一个视图的左上角坐标,我该怎么做?

struct HomeView: View {
    var body: some View {
        VStack(alignment: .leading) {
            Text("Top Text")
                .font(.system(size: 20))
                .fontWeight(.medium)
             Text("Bottom Text")
                .font(.system(size: 12))
                .fontWeight(.regular)
        }
        .position(x: 0, y: 0)
    }
}

当前,我的视图的左半部分被切断了屏幕,如何防止这种情况?另外,如何相对于安全区域对齐?

我想念UIKit?

enter image description here

3 个答案:

答案 0 :(得分:4)

@Asperi的答案将解决此问题。但是,我认为我们应该使用Spacer()而不是Color.clearZStack

Spacer专为这些情况而设计,使代码更易于理解。

struct HomeView: View {
    var body: some View {
        HStack {
            VStack(alignment: .leading) {
                Text("Top Text")
                    .font(.system(size: 20))
                    .fontWeight(.medium)

                Text("Bottom Text")
                    .font(.system(size: 12))
                    .fontWeight(.regular)
                Spacer()
            }
            Spacer()
        }
    }
}

SwiftUI布局系统与UIKit不同。

它要求每个子视图根据其父视图的边界来计算其自身的大小。接下来,要求每个父母将自己的孩子置于自己的范围内。

https://www.hackingwithswift.com/books/ios-swiftui/how-layout-works-in-swiftui

答案 1 :(得分:2)

您可以使用:

import numpy as np
import pandas as pd
d = np.array(['624: COUPLE , 507: DELUXE+ ,301: HONEYMOON','624:FAMILY , 
      507: FAMILY+','621:FAMILY , 517: FAMILY+','696:FAMILY , 585: 
      FAMILY+,624:FAMILY , 507: DELUXE'])
df = pd.Series(d)
df= df.str.extractall(r'(?P<room>[0-9]+):\s*(?P<grd>[^\s,]+)')

gh = df[df['room'] == '507'].index

rf = pd.DataFrame(index=range(0,4),columns=['room#507','room#624'], 
      dtype='float')


for i in range(0,rf.shape[0]):
   for j in range(0,gh.shape[0]):
     if (i == gh[j][0]):
        rf['room#507'][i] = df.grd[gh[j][0]][gh[j][1]]

因此您将相对于当前对象位置。

https://developer.apple.com/documentation/swiftui/gaugestyleconfiguration/currentvaluelabel-swift.struct/offset(x:y:)

答案 2 :(得分:1)

如果我正确理解了您的目标,那么.position并不是实现目标的合适工具。 SwiftUI布局无需硬编码即可更好地工作。

这是可能的解决方案。使用Xcode 11.4 / iOS 13.4进行了测试

demo

struct HomeView: View {
    var body: some View {
        ZStack(alignment: .topLeading) {
            Color.clear
            VStack(alignment: .leading) {
                Text("Top Text")
                    .font(.system(size: 20))
                    .fontWeight(.medium)
                 Text("Bottom Text")
                    .font(.system(size: 12))
                    .fontWeight(.regular)
            }
        }.frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}