如何在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?
答案 0 :(得分:4)
@Asperi的答案将解决此问题。但是,我认为我们应该使用Spacer()
而不是Color.clear
和ZStack
。
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]]
因此您将相对于当前对象位置。
答案 2 :(得分:1)
如果我正确理解了您的目标,那么.position
并不是实现目标的合适工具。 SwiftUI布局无需硬编码即可更好地工作。
这是可能的解决方案。使用Xcode 11.4 / iOS 13.4进行了测试
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)
}
}