Как выровнять индикатор выполнения по правому краю метки и сохранить метку в центре VStack в SwiftUI? - PullRequest
1 голос
/ 05 апреля 2020

Я хочу отобразить метку в центре представления с индикатором прогресса справа от метки. Как я могу сделать это в SwiftUI на macOS?

Приведенный ниже код выравнивает HStack по центру VStack, но я хочу, чтобы текст центрировался, а индикатор выполнения был выровнен по задней кромке текста. Я думаю, что я мог бы заменить HStack на ZStack, но до сих пор не ясно, как выровнять два элемента управления друг с другом или как один предотвращает центрирование контейнера его контейнером.

import SwiftUI

struct AlignmentTestView: View {
    var body: some View {
        VStack(alignment: .center, spacing: 4) {
            HStack {
                Text("Some text")
                ActivityIndicator()
            }
        }.frame(width: 200, height: 200)
            .background(Color.pink)
    }
}

struct AlignmentTestView_Previews: PreviewProvider {
    static var previews: some View {
        AlignmentTestView()
    }
}

1 Ответ

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

Здесь возможен подход (проверено заменой ActivityIndicator просто кружком).

Используется Xcode 11.4 / iOS 13.4 / macOS 10.15.4

demo

demo

var body: some View {
    VStack {
        HStack {
            Text("Some text")
                .alignmentGuide(.hAlignment) { $0.width / 2.0 }
            ActivityIndicator()
        }
    }
    .frame(width: 200, height: 200, alignment: 
           Alignment(horizontal: .hAlignment, vertical: VerticalAlignment.center))
    .background(Color.pink)
}

extension HorizontalAlignment {
    private enum HAlignment : AlignmentID {
        static func defaultValue(in d: ViewDimensions) -> CGFloat {
            return d[HorizontalAlignment.center]
        }
    }

    static let hAlignment = HorizontalAlignment(HAlignment.self)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...