SwiftUI, есть ли traitCollectionDidChange-подобный метод в представлении? - PullRequest
0 голосов
/ 24 апреля 2020

Я исследую SwiftUI, чтобы посмотреть, подходит ли он для использования нашим компонентом. Тем не менее, я нахожу это довольно обнаженным и удивляюсь, упускаю ли я некоторые ключевые идеи.

В настоящее время я изучаю, могут ли V / HStack динамически реагировать на изменения размера шрифта Accesability. Проблема в том, что мне нужно дать элементам рамку, он не привязывает автоматически внешние представления стеков к их внутреннему содержанию. Когда пользователь устанавливает полный размер шрифта в банановом режиме, пользовательский интерфейс просто ломается.

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: представление {

@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)
        }
    }
}

}


Вот 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 В UIkit эти проблемы могут быть решены в хуке traitCollectionDidChange. Однако в Swift UI я просто не могу найти эквивалент.

У кого-нибудь есть идеи?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...