我正在嵌入一个高度可变的视图控制器UITextView
在父 SwiftUI VStack 中,视图控制器将其框架调整为整个屏幕viewDidLoad
and viewDidLayoutSubviews
. The UITextView
仅扩展到其自身内部文本的大小,并将其自身置于父视图中的中心。
我正在尝试在 VStack 中添加此视图控制器,并使其在外部表现得像其他 SwiftUI 组件一样 - 大小与它包含的内容完全一致 - 但它希望调整大小为整个屏幕减去其他 VStack 元素。
我可以获得正确的尺寸UITextView
in didLayoutSubviews
并将其向上传递到 SwiftUI,在那里可以正确设置它 - 但我在哪里可以做到这一点?
在下面的示例屏幕截图中,橙色是嵌入的UIView
背景,绿色的是UITextView
VStack 看起来像这样:
VStack {
HighligherVC()
Text("Tap and drag to highlight")
.foregroundColor(.gray)
.font(.caption)
}
如果无法看到更多代码,很难说出最好的解决方案是什么,但纯粹基于问题的这一部分......
我可以在 didLayoutSubviews 中获取 UITextView 的正确大小,并将其向上传递到 SwiftUI,在那里可以正确设置它 - 但我在哪里可以做到这一点?
我建议您将绑定属性传递给视图控制器,该属性可以设置为计算出的文本视图高度,这意味着包含您的视图的视图VStack
会有一个@State
像这样的属性:
@State private var textViewHeight: CGFloat = 0
然后你会声明一个@Binding
您的财产HighlighterVC
并添加一个像这样的初始化程序:
@Binding var textViewHeight: CGFloat
init(textViewHeight: Binding<CGFloat>) {
self._textViewHeight = textViewHeight
}
然后你会设置textViewHeight
到您计算出的高度didLayoutSubviews
并添加一个.frame
修饰符到你的HighlighterVC
像这样:
VStack {
HighlighterVC(textViewHeight: self.$textViewHeight)
.frame(height: self.textViewHeight)
Text("Tap and drag to highlight")
.foregroundColor(.gray)
.font(.caption)
}
就像我在回答开始时所说的那样,这个解决方案(我相信会起作用,但由于我无法测试它,所以我不是 100% 确定)基于您对您需要什么的想法。如果没有看到更多代码,我不可能说这是否是最好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)