在UIViewRepresentable SwiftUI中设置自定义UIView框架

时间:2020-06-10 10:35:16

标签: swift uikit swiftui uiviewrepresentable

我正在尝试使用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)
    }
}

这不是解决方案,我想知道如何正确设置。

1 个答案:

答案 0 :(得分:3)

如果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布局有缺陷。