问题描述
我正在尝试将 UIKit 上下文菜单添加到 SwiftUI 视图中,因为 SwiftUI 上下文菜单非常有限。我设法做到了,但 UIViewControllerRepresentable 占用的空间超出了它的需要。如何调整其大小以适应其中的内容?这是我的代码。
SwiftUI 代码
struct TrackerCard: View {
var tracker: Tracker
var body: some View {
HStack {
HStack {
...
}
.padding()
.background(Color("Wrapper"))
.cornerRadius(15)
}
.padding(.horizontal)
}
}
struct TrackerCardView: View {
var tracker: Tracker
var body: some View {
ContextMenuView(card: TrackerCard(tracker: tracker))
}
}
UIKit 代码
class ContextMenuController : UIViewController,UIContextMenuInteractionDelegate {
var card: TrackerCard?
var hostingViewController: UIHostingController<TrackerCard>?
func setViewController(_ controller : UIHostingController<TrackerCard>) {
hostingViewController = controller
self.addChild(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = .init(white: 1,alpha: 1)
view.addSubview(controller.view)
controller.didMove(toParent: self)
controller.view.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
}
func setInteraction() {
let interaction = UIContextMenuInteraction(delegate: self)
hostingViewController?.view.addInteraction(interaction)
}
func contextMenuInteraction(_ interaction: UIContextMenuInteraction,configurationForMenuAtLocation location: CGPoint) -> uicontextmenuconfiguration? {
return ...
}
struct ContextMenuView: UIViewControllerRepresentable {
typealias UIViewControllerType = ContextMenuController
var card: TrackerCard
var controller : UIViewControllerType? = nil
func makeUIViewController(context: Context) -> ContextMenuController {
let contextMenuController = controller ?? ContextMenuController()
contextMenuController.card = card
return contextMenuController
}
func updateUIViewController(_ contextMenuController: ContextMenuController,context: Context) {
contextMenuController.setViewController(UIHostingController(rootView: card))
contextMenuController.setInteraction()
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)