【问题标题】:Set custom UIView frame in UIViewRepresentable SwiftUI在 UIViewRepresentable SwiftUI 中设置自定义 UIView 框架
【发布时间】:2020-09-29 17:50:03
【问题描述】:

我正在尝试使用 UIViewRepresentable 在 SwiftUI 中使用我的自定义 UIView,并且我希望我的 UIView 具有与我在 .frame() 中设置的大小相同的大小,以便我可以像这样使用它:

MyViewRepresentable()
.frame(width: 400, height: 250, alignment: .center)

例如,我可以将框架设置为属性:

struct MyViewRepresentable: UIViewRepresentable {
    var frame: CGRect
    func makeUIView(context: Context) -> UIView {
        let myView = MyView(frame: frame)

        return view
    }
    func updateUIView(_ uiView: UIView, context: Context) {}
}

用法:

struct ContentView: View {
    var body: some View {
        MyViewRepresentable(frame: CGRect(x: 0, y: 0, width: 400, height: 250))
            .frame(width: 400, height: 250, alignment: .center)
    }
}

这不是一个解决方案,我想知道如何使它正确。

【问题讨论】:

    标签: swift uikit swiftui uiviewrepresentable


    【解决方案1】:

    如果MyView具有正确的内部布局(仅取决于自己的边界),则不需要外部附加限制,即

    struct MyViewRepresentable: UIViewRepresentable {
        func makeUIView(context: Context) -> UIView {
            return MyView(frame: .zero)
        }
        func updateUIView(_ uiView: UIView, context: Context) {}
    }
    

    将在 400x250 帧以下精确调整尺寸

    struct ContentView: View {
        var body: some View {
            MyViewRepresentable()
                .frame(width: 400, height: 250, alignment: .center)
        }
    }
    

    如果不是,则内部 MyView 布局有缺陷。

    【讨论】:

    • 感谢您为我指明了正确的方向!我查看了我的代码,发现我在 viewDidLoad 中添加了 MyView 子视图,而不是在 layoutSubviews 中。
    • 谢谢@IreiDev,这对我也有用。也许您将此添加为您自己问题的答案,这会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2022-12-23
    • 2021-09-30
    相关资源
    最近更新 更多