我正在尝试进行以下布局:
我希望矩形的高度与右侧的灰色文字的高度完全相同。我这样使用了几何阅读器:
var body: some View {
HStack(alignment: .top, spacing:0){
Text("14:00")
.modifier(DateSurveyListModifier(fontSize: 14, isSelected: occurrence.isCompleted))
.foregroundColor(occurrence.isCompleted ? .HomeMainGrey : .HomeSecondGrey )
.padding(.top,10)
.padding(.trailing,12)
VStack(spacing:0){
if occurrence.isCompleted
{
pinSurveyHighlighted().frame(width:25,height:25)
}
else
{
pinSurveyHighlighted()
}
// Where I'm trying to make the rectangle
GeometryReader{ geo in
Rectangle().foregroundColor(.HomeMainBlue).frame(width:3,height: geo.size.height)
}.aspectRatio(contentMode: .fit)
}
.padding(.top,5)
VStack(alignment: .leading ,spacing:0){
Text("Lorem ipsum dolor sit dolor dolor dolor dolor dolor dolor dolor dolor dolor dolor")
.multilineTextAlignment(.leading)
.modifier(TitleSurveyListModifier(fontSize : 15 ,isSelected: occurrence.isCompleted))
.foregroundColor(occurrence.isCompleted ? .HomeGreySurveyList : .HomeSecondGrey )
.frame(alignment: .leading)
Text("lit. Aliquam quis consectetu consectet consectetu consectetu consectetu consectetuconsectetu consectetu consectetu consectetu consectetu consectetu consectetu consectetu v consectetuuconsectetu ")
.modifier(DateSurveyListModifier(fontSize : 14 , isSelected: occurrence.isCompleted))
.foregroundColor(occurrence.isCompleted ? .HomeMainGrey : .HomeSecondGrey )
.multilineTextAlignment(.leading)
.frame(alignment: .leading)
.padding(.top,5)
}
.padding(.leading,15)
Spacer()
}
.padding(.top,15)
.padding(.horizontal,37)
}
我可能已经错过了一些有关Geometry reader的规则,但就我而言,它占用了太多空间,我的布局现在看起来像这样:
我正在寻找一些帮助,以了解geometryReader的实际工作原理,以实现我的观点。
答案 0 :(得分:3)
您无需在此处使用geometryReader。
VStack{ ...
Spacer().layoutPriority(1) }
//This will push all views in the `HStack` to the top half of the screen and saving some place for `HStack` while preventing the long vertical rectangle from appearing.
和
.fixedSize(horizontal: false, vertical: true)
//This will guarantee the gray text part will have the correct height.
可以实现您想要的。
var body: some View {
VStack{
HStack(alignment: .top, spacing:0){
Text("14:00")
//.modifier(DateSurveyListModifier(fontSize: 14, isSelected: occurrence.isCompleted))
// .foregroundColor(occurrence.isCompleted ? .HomeMainGrey : .HomeSecondGrey )
.padding(.top,10)
.padding(.trailing,12)
VStack(spacing:0){
if false
{
Text("hext").frame(width:25,height:25)
}
else
{
Text("hext")
}
// Where I'm trying to make the rectangle
Rectangle() .foregroundColor(.red).frame(width: 3)
}.padding(.top,5 )
VStack(alignment: .leading ,spacing:0){
Text("Lorem ipsum dolor sit dolor dolor dolor dolor dolor dolor dolor dolor dolor dolor")
.multilineTextAlignment(.leading)
.font(Font.system(size: 15))
// .modifier(TitleSurveyListModifier(fontSize : 15 ,isSelected: occurrence.isCompleted))
// .foregroundColor(occurrence.isCompleted ? .HomeGreySurveyList : .HomeSecondGrey )
.frame(alignment: .leading)
Text("lit. Aliquam quis consectetu consectet consectetu consectetu consectetu consectetuconsectetu consectetu consectetu consectetu consectetu consectetu consectetu consectetu v consectetuuconsectetu ")
.font(Font.system(size: 14))
// .modifier(DateSurveyListModifier(fontSize : 14 , isSelected: occurrence.isCompleted))
// .foregroundColor(occurrence.isCompleted ? .HomeMainGrey : .HomeSecondGrey )
.multilineTextAlignment(.leading)
.frame(alignment: .leading)
.padding(.top,5)
}.padding(.leading,15).fixedSize(horizontal: false, vertical: true)
Spacer()
}
Spacer().layoutPriority(1)
}
.padding(.top,15)
.padding(.horizontal,37)
}