我在UITextView父 SwiftUI VStack 中嵌入了一个具有可变高度的视图控制器,并且视图控制器将它的框架大小调整为viewDidLoad和之间的整个屏幕viewDidLayoutSubviews。该UITextView扩展只能内部本身和中心本身的文本父视图内的大小。
我正在尝试将这个视图控制器添加到 VStack 中,并让它在外部表现得像其他 SwiftUI 组件一样 - 大小与它包含的内容完全一致 - 但它希望大小为整个屏幕减去其他 VStack 元素。
我可以获得正确的UITextViewin大小didLayoutSubviews并将其向上传递给 SwiftUI,在那里它可以正确设置 - 但我在哪里做呢?
在下面的示例截图中,橙色是嵌入的UIView背景,绿色是UITextView并且 VStack 看起来像这样:
VStack {
HighligherVC()
Text("Tap and drag to highlight")
.foregroundColor(.gray)
.font(.caption)
}
Run Code Online (Sandbox Code Playgroud)
由于无法看到更多代码,因此很难说出最佳解决方案是什么,但纯粹基于您问题的这一部分......
我可以在 didLayoutSubviews 中获得 UITextView 的正确大小并将其向上传递给 SwiftUI,在那里可以正确设置它 - 但我在哪里做呢?
我建议您将绑定属性传递给您的视图控制器,该属性可以设置为计算出的文本视图高度,这意味着包含您的视图VStack将具有如下@State属性:
@State private var textViewHeight: CGFloat = 0
Run Code Online (Sandbox Code Playgroud)
然后,您将@Binding在您的上声明一个属性HighlighterVC并添加一个如下所示的初始化程序:
@Binding var textViewHeight: CGFloat
init(textViewHeight: Binding<CGFloat>) {
self._textViewHeight = textViewHeight
}
Run Code Online (Sandbox Code Playgroud)
然后您将设置textViewHeight为您的计算高度并为您didLayoutSubviews添加一个.frame修改器,HighlighterVC如下所示:
VStack {
HighlighterVC(textViewHeight: self.$textViewHeight)
.frame(height: self.textViewHeight)
Text("Tap and drag to highlight")
.foregroundColor(.gray)
.font(.caption)
}
Run Code Online (Sandbox Code Playgroud)
就像我在回答开头所说的那样,这个解决方案(我认为可行,但由于我无法对其进行测试,因此我不是 100% 确定)基于您对所需内容的想法。在没有看到更多代码的情况下,我不可能说这是否是最好的解决方案。
| 归档时间: |
|
| 查看次数: |
4321 次 |
| 最近记录: |