1

I'm researching SwiftUI to see if it fits our compony's use case. However, I find it rather bare bones and wonder wether I am missing some key insights.

Currently I am researching if V/HStack's can respond dynamically to Accesability font-size changes. The issue is that I need to give the items a frame, it does not automatically pin the outer Stacks items-view constraints to their inner content. When the user sets the font-size to full blown Bananas-mode the UI just breaks.

struct PatientHistoryView: View {

    @State var model : PatientHistoryModel = historyModel;



    var body : some View {
        GeometryReader { g in

            ScrollView(.vertical, showsIndicators: true) {
                List
                {
                    ForEach(self.model.data)
                     {   labResults in
                        LabDetailView(labeResults: labResults)
                     }
                }.frame(width: 300, height: g.size.height).background(Color.clear)
            }
        }
    }
}

adding these properties do not seem to affect the Font-scaling issues:

struct PatientHistoryView: View {

@State var model : PatientHistoryModel = historyModel;



var body : some View {
    GeometryReader { g in

        ScrollView(.vertical, showsIndicators: true) {
            List
            {
                ForEach(self.model.data)
                 {   labResults in
                    LabDetailView(labeResults: labResults).frame(minWidth: 200, idealWidth: 400, maxWidth: 600, minHeight: 50, idealHeight: 100, maxHeight: 600)
                 }
            }.frame(width: 300, height: g.size.height).background(Color.clear)
        }
    }
}

}


Here is the labDetailView


struct LabDetailView: View {

    var labeResults : LabResults
    var color : Color = .red

    var spacer : some View {
        Spacer().frame(width: 10, height: 0)
    }

    var body : some View {

        GeometryReader { g in
            HStack
            {
                Group
                {
                    VerticalLineView().frame(width: 10, height: g.size.height, alignment: .leading).background(self.color)
                    self.spacer
                    self.spacer
                    LineStack(lineColor: .white, lineHeight: 2).frame(width: 20, height: 20, alignment: .center)
                    self.spacer
                    self.spacer
                }

                VStack(alignment: .leading, spacing: 8)
                {
                    Text(self.labeResults.title).fontWeight(.bold)
                    Text(self.labeResults.type)
                }

                Spacer()

                VStack(alignment: .center)
                {
                    Text(self.labeResults.max.asString)
                    Spacer()
                    Text(self.labeResults.avg.asString).fontWeight(.bold).font(.system(size: 20))
                    Spacer()
                    Text(self.labeResults.min.asString)
                }.frame(width: 50, height: g.size.height, alignment: .center)

                self.spacer
                self.spacer

            }.frame(width: g.size.width, height: g.size.height, alignment: .leading)
        }
    }
}

enter image description here In UIkit these issues can be resolved in the traitCollectionDidChange hook. However, in Swift UI I just cannot find an equivalent.

Doe anybody have any ideas?

Thanks!

XLE_22
  • 5,124
  • 3
  • 21
  • 72
Arne Oldenhave
  • 201
  • 1
  • 3
  • 12
  • The problem is not clear. In SwiftUI [V,H,Z]Stack automatically tight to content, so if you place Text into any container, and add border to container, and then change accesibility font, you'll see automatic frame alignment with content. So would you provide some demo code for your issue? – Asperi Apr 24 '20 at 08:29
  • You are right, I've added some code – Arne Oldenhave Apr 24 '20 at 08:43

0 Answers0