You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中如何创建兼容任意View的泛型PortraitViewController

解决方案

改造后的泛型实现

import SwiftUI
import UIKit

class PortraitViewController<Content: View>: UIHostingController<Content> {
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }
}

实例化用法

你可以直接传入任意遵守View协议的SwiftUI视图,编译器会自动推导泛型类型:

// 传入原有MyView
let vc = PortraitViewController(rootView: MyView())

// 支持任意其他SwiftUI视图
let textVC = PortraitViewController(rootView: Text("通用竖屏控制器"))
let listVC = PortraitViewController(rootView: List {
    Text("列表项1")
    Text("列表项2")
})

问题原因说明

你之前尝试直接把父类改为UIHostingController<View>无法运行,是因为Swift泛型要求传入具体类型,不能直接使用View协议本身作为泛型参数。通过给自定义类声明带约束的泛型参数Content: View,可以在实例化时自动匹配传入的视图类型,无需额外处理就能支持所有SwiftUI视图。

内容的提问来源于stack exchange,提问作者zumzum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:09:03