我尝试使用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)
}
}
型
这不是一个解决方案,我想知道如何使它正确。
3条答案
按热度按时间qhhrdooz1#
如果
MyView
具有正确的内部布局(仅取决于自身边界),则不需要外部额外限制,即字符串
将精确地在具有400x250框架的情况下进行调整
型
如果不是,则内部MyView布局有缺陷。
atmip9wb2#
如果MyView的回答对你不起作用,那么很可能就像他们说的那样:MyView的内部布局有缺陷。
要解决这个问题,你有几个选择:
选项A.在
viewDidLoad
中使用AutoLayout约束字符串
选项B.
viewDidLayoutSubviews
内手动设置帧只需在
UIViewController
中设置viewDidLayoutSubviews
中的子视图帧。型
补充资源
*基于框架的布局.在UIView上手动操作
frame
和bounds
属性。*自动调整掩码。在引擎盖下,
autoResizingMask
使用古老的Spring和支柱。参见autoResizingMask
,this answer和this article。*自动布局Constraints。
*自动布局StackView。
*SwiftUI的
VStack
和HStack
!这仅适用于SwiftUI,以上所有内容仅适用于UIKit。也许应该为此做一个小的开发文章。
lnvxswe23#
一个简单的黑客,如果你不知道什么是错误的MyView是将其添加到一个UIView内,然后返回它,即
字符串