gpt4 book ai didi

swiftui - 在 SwiftUI 中从 UIKit 更新 UIViewRepresentable 大小

转载 作者:行者123 更新时间:2023-12-03 13:33:13 25 4
gpt4 key购买 nike

我正在嵌入一个高度可变的 View Controller UITextView在父 SwiftUI VStack 中, View Controller 在 viewDidLoad 之间将其框架调整为整个屏幕和 viewDidLayoutSubviews . UITextView仅扩展为自身内部文本的大小,并在父 View 中居中。

我正在尝试将这个 View Controller 添加到 VStack 中,并让它在外部表现得像其他 SwiftUI 组件一样 - 大小完全符合它包含的内容 - 但它希望调整到整个屏幕的大小减去其他 VStack 元素。

我可以得到 UITextView 的正确大小在 didLayoutSubviews并将其向上传递给可以正确设置的 SwiftUI - 但我该在哪里做呢?

在下面的示例屏幕截图中,橙色是嵌入的 UIView背景,绿色的是UITextView VStack 看起来像这样:

    VStack {
HighligherVC()
Text("Tap and drag to highlight")
.foregroundColor(.gray)
.font(.caption)
}

example of the parent uiview expanding to be too high

最佳答案

由于无法查看更多代码,很难说出最佳解决方案是什么,但纯粹基于您问题的这一部分......

I can get the correct size of the UITextView in didLayoutSubviews and pass it upwards to SwiftUI where it can be set properly - but where do I do that?



我建议您将绑定(bind)属性传递给您的 View Controller ,该属性可以设置为计算出的 TextView 高度,这意味着包含您的 VStack 的 View 会有 @State像这样的属性(property):

@State private var textViewHeight: CGFloat = 0

然后你会声明一个 @Binding您的 HighlighterVC 上的属性(property)并添加一个像这样的初始化程序:

@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% 确定)是基于你对你需要什么的想法。如果没有看到更多代码,我不可能说这是否是最好的解决方案。

关于swiftui - 在 SwiftUI 中从 UIKit 更新 UIViewRepresentable 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57237580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com