Как позиционировать виды относительно их верхнего левого угла в SwiftUI - PullRequest
0 голосов
/ 29 апреля 2020

Как мне разместить представления относительно их верхнего левого угла в swiftUI? Модификатор "position" перемещает виды относительно их центральных координат. Таким образом, .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

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

@ Ответ Аспери решит проблему. Но, я думаю, что мы должны использовать Spacer(), а не Color.clear и ZStack.

Spacer специально разработан для этих сценариев ios и облегчает понимание кода.

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

0 голосов
/ 29 апреля 2020

Если я правильно понимаю вашу цель, .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)
    }
}
...