Ios 具有UIViewRepresentable的多行标签
我正试图通过使用Ios 具有UIViewRepresentable的多行标签,ios,swift,swiftui,uikit,Ios,Swift,Swiftui,Uikit,我正试图通过使用UIViewRepresentable在SwiftUI中使用UIKit创建的组件。我想要实现的结果是在我的视图顶部有一个文本字段,在底部有一个自动高度的UIKit视图 问题是这个组件包含一个多行标签,据我所见,它很难让自动高度正常工作,因此我的UIKit组件占用了VStack中的所有可用空间 下面是我的代码,包含在一个操场中,用于测试它。我试着使用拥抱优先权,但没有任何效果,如果我使用快速UI视图进行测试,它会正常工作。。有什么想法吗 import UIKit import
UIViewRepresentable
在SwiftUI中使用UIKit创建的组件。我想要实现的结果是在我的视图顶部有一个文本字段,在底部有一个自动高度的UIKit视图
问题是这个组件包含一个多行标签,据我所见,它很难让自动高度正常工作,因此我的UIKit组件占用了VStack中的所有可用空间
下面是我的代码,包含在一个操场中,用于测试它。我试着使用拥抱优先权,但没有任何效果,如果我使用快速UI视图进行测试,它会正常工作。。有什么想法吗
import UIKit
import Foundation
import SwiftUI
import PlaygroundSupport
class InformationView: UIView {
lazy var label = UILabel()
lazy var button = UIButton(type: .custom)
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .red
addSubview(label)
addSubview(button)
label.text = "zaeiof azoeinf aozienf oaizenf oazeinf oaziefj oazeijf oaziejf aozijf oaizje foazeafjoj"
label.numberOfLines = 0
label.setContentHuggingPriority(.required, for: .vertical)
label.translatesAutoresizingMaskIntoConstraints = false
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle("My button title", for: .normal)
button.setContentCompressionResistancePriority(.required, for: .horizontal)
addConstraints([
label.leadingAnchor.constraint(equalTo: leadingAnchor),
label.topAnchor.constraint(equalTo: topAnchor),
label.bottomAnchor.constraint(equalTo: bottomAnchor),
label.trailingAnchor.constraint(equalTo: button.leadingAnchor, constant: -10),
button.trailingAnchor.constraint(equalTo: trailingAnchor),
button.centerYAnchor.constraint(equalTo: centerYAnchor)
])
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
struct InformationRepresenter: UIViewRepresentable {
func makeUIView(context: Context) -> InformationView {
let view = InformationView(frame: .zero)
view.setContentHuggingPriority(.required, for: .vertical)
return view
}
func updateUIView(_ uiView: InformationView, context: Context) {
}
}
struct Info: View {
var body: some View {
return HStack {
Text("zaeiof azoeinf aozienf oaizenf oazeinf oaziefj oazeijf oaziejf aozijf oaizje foazeafjoj")
Button("My button title", action: {
print("test")
})
}
}
}
struct ContentView: View {
@State var text = ""
var body: some View {
VStack {
TextField("Field", text: $text)
.padding()
Spacer()
// SwiftUI works
// Info().background(Color.red).padding()
// UIViewRepresentable doesn't
InformationRepresenter().padding()
}
}
}
PlaygroundPage.current.setLiveView(ContentView().frame(width: 400, height: 800, alignment: .top))
这里发生了一些事情
没有InformationView
。SwiftUI依赖此属性来确定intrinsicContentSize
的理想大小UIView
- 无
修改器。此修改器强制视图保持其理想大小,而不是增大以填充其父视图fixedSize
intrinsicContentSize
,因为内容大小是动态的;它基于标签中的行数
无法添加fixedSize
修饰符,因为如果没有intrinsicContentSize
,这会将大小设置为(0,0)
非常感谢您的回答,它确实帮助我了解了根本问题是什么以及如何解决它