【问题标题】:SwiftUI: how to set a greater than or equal constraint like UIKit's AutoLayout?SwiftUI:如何像 UIKit 的 AutoLayout 一样设置大于或等于约束?
【发布时间】:2021-02-14 15:13:01
【问题描述】:

在一个 UIKit 项目中,我在一个视图中有这样的约束:

结果如下:

我想在 SwiftUI 中做同样的事情,所以我尝试了这个:

var body: some View {
    ZStack(alignment: .trailing) {
        Style.Color.blue
            .cornerRadius(17)
        Text(text)
            .foregroundColor(.white)
            .padding(.horizontal, 11)
            .padding(.vertical, 8)
            .lineLimit(nil)
    }
}

我得到了这个结果:

我不知道如何在 UIKit 中做同样的事情,将大于或等于前导约束应用于蓝色视图。 此外,如您所见,在单行气泡上,蓝色视图不会粘在文本标签上,而是转到屏幕的前导部分。我该如何解决这个问题?

感谢您的帮助

【问题讨论】:

    标签: ios swiftui


    【解决方案1】:

    这是一个可能的解决方案:

    struct ItemView: View {
        let text: String
    
        var body: some View {
            Text(text)
                .foregroundColor(.white)
                .lineLimit(nil)
                .padding(10)
                .background(Color.blue)
                .cornerRadius(17)
        }
    }
    
    struct ContentView: View {
        let texts = ["Short text", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."]
        
        var body: some View {
            ZStack(alignment: .trailing) {
                Color.clear
                VStack {
                    ForEach(texts, id: \.self) { text in
                        HStack {
                            Spacer()
                            ItemView(text: text)
                        }
                        .padding(.horizontal, 11)
                        .padding(.vertical, 8)
                    }
                }
            }
        }
    }
    

    请注意,您可能希望提供一种识别文本的方法(如果它们可以是非唯一的),而不是 ForEach(texts, id: \.self) 中的 \.self

    【讨论】:

    • 感谢您的回答!我刚刚在HStackSpacer() 左侧添加了一个带有框架.frame(width: 104, height: .infinity) 的白色视图。不知道这是否是最好的方法,但它确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多