【问题标题】:Adaptive frame (widget) size with swiftui shape具有 swiftui 形状的自适应框架(小部件)大小
【发布时间】:2020-05-31 19:29:35
【问题描述】:

我想调整小部件的大小以适应小部件内容的整体大小。问题是,标准形状(小部件的背景)默认为可用空间,我不想硬编码它的框架。任何建议,例如使用 GeometryReader?

struct WidgetView: View {
    var body: some View {

        ZStack {

            RoundedRectangle(cornerRadius: 40, style: .continuous)
                .foregroundColor(.gray)

            Text("TestingText")

        }
    }
}

【问题讨论】:

    标签: ios swiftui size frame shapes


    【解决方案1】:

    我猜你想要这个

    struct WidgetView: View {
        var body: some View {
    
            Text("TestingText")
               .background(RoundedRectangle(cornerRadius: 40, style: .continuous)
                .foregroundColor(.gray))
        }
    }
    

    更新:我认为您的担忧是由于较大的圆角半径可能会削减一些内部内容。

    这里有一些方法

    struct WidgetView<V: View>: View {   // more generic view
        var content: () -> V
        var body: some View {
            content()
               .background(RoundedRectangle(cornerRadius: 40, style: .continuous)
                .foregroundColor(.gray).padding(-20))  // compensation !!
        }
    }
    

    测试(Xcode 11.4 / iOS 13.4)

    WidgetView {
        VStack {
            Image(systemName: "car")
                .resizable().frame(width: 80, height: 80)
            Text("Some Label")
        }
    }
    

    输出

    【讨论】:

    • 我知道这可能是这个特定示例的一种可能方法,但实际上我想用不同类型的“顶层”重用这个视图,不仅仅是一个文本,而是多个元素。我已经意识到,将视图嵌入到滚动视图中,问题得到了解决,但它不适用于嵌入例如VStack。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2018-11-30
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多