我想,这个想法是这样的:无论 SwiftUI 中尚未提供什么,都可以使用 UIViewRepresentable 来解决。所以我开始为 TTTAttributedLabel 制作一个 UIViewRepresentable。
但是 API 中缺少一些基本的东西,或者我缺少一些基本的东西:如何设置 UIViewRepresentable 的“内在内容大小”?
就像 SwiftUI 一样Text,我希望我的组件能够根据其容器的大小将自身设置为特定大小。
我的第一个想法是使用内在内容大小,所以我创建了这个:
class SizeRepresentableView: UILabel {
override init(frame: CGRect) {
super.init(frame: CGRect.zero)
text="hello"
backgroundColor = UIColor.systemYellow
}
override var intrinsicContentSize: CGSize {
return CGSize(width: 100, height: 100)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
struct SizeRepresentable: UIViewRepresentable {
func updateUIView(_ uiView: SizeRepresentableView, context: Context) {
}
typealias UIViewType = SizeRepresentableView
func makeUIView(context: UIViewRepresentableContext<SizeRepresentable>) -> SizeRepresentableView {
let v = SizeRepresentableView(frame: CGRect.zero)
return v
}
}
struct SizeRepresentableTest: View {
var body: some View {
VStack {
SizeRepresentable()
Spacer()
}
}
}
struct SizeRepresentable_Previews: PreviewProvider {
static var previews: some View {
SizeRepresentableTest()
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用。标签占据了所有空间,而间隔物则没有。使用 SwiftUIText而不是我的,SizeRepresentable标签整齐地排列在顶部,并且间隔符占据了所有空间,正如它应该的那样。
我似乎找不到任何有关如何布局 UIViewRepresentable 的文档。
有什么方法可以解决这个问题呢?
请参阅:UIViewRepresentable 本身的大小如何与其内部的 UIKit 控件相关?
struct SizeRepresentableTest: View {
var body: some View {
VStack {
SizeRepresentable().fixedSize()
Spacer()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4139 次 |
| 最近记录: |