Objective C 到 SwiftUI 隐藏导航栏
Posted
技术标签:
【中文标题】Objective C 到 SwiftUI 隐藏导航栏【英文标题】:Objective C to SwiftUI Hide Navigation Bar 【发布时间】:2021-06-29 01:59:44 【问题描述】:我有一个可以导航到 SwiftUI 布局的 Objective C 应用程序。 当它这样做时,屏幕顶部有一个空白区域,我认为它是一个导航栏。原始的 Objective C 布局没有导航栏。
在下面的代码中,我应该在哪里移除导航栏?
这就是我从 Objective C 打开 SwiftUI 布局的方式:
@property SwuiftUIInterface *goldieInterface;
@property UIViewController *swiftViewController;
- (void)viewDidLoad
self.goldieInterface = [[SwuiftUIInterface alloc] init];
self.swiftViewController = [[UIViewController alloc] init];
self.swiftViewController = [self.goldieInterface makeSwiftUI:macAddresses];
[self.navigationController setViewControllers:@[self.swiftViewController] animated:YES];
这是 SwiftUIInterface 函数 makeSwiftUI:
@objc class SwuiftUIInterface: NSObject
@objc func makeSwiftUI(_ macAddr:String) ->
UIViewController
var details = SwiftUIView(runTimer: true)
return UIHostingController(rootView: details)
这是我的 SwiftUIView:
import SwiftUI
import UserNotifications
struct SwiftUIView: View
var body: some View
【问题讨论】:
【参考方案1】:我发现解决方案是访问 UIHostingController
为了获得访问权限,我将其添加到 SwiftUIInterface 文件中:
class YourHostingController <Content>: UIHostingController<AnyView> where Content : View
public init(shouldShowNavigationBar: Bool, rootView: Content)
super.init(rootView: AnyView(rootView.navigationBarHidden(!shouldShowNavigationBar)))
@objc required dynamic init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
然后我像这样更改了 SwiftUIInterface 类
@objc class SwuiftUIInterface: NSObject
@objc func makeSwiftUI(_ macAddr:String) ->
UIViewController
print("swift interface Make set ui view controller")
let details = SwiftUIView(runTimer: true)
let sleepFreq: YourHostingController = YourHostingController(shouldShowNavigationBar: false, rootView: details)
return sleepFreq
【讨论】:
以上是关于Objective C 到 SwiftUI 隐藏导航栏的主要内容,如果未能解决你的问题,请参考以下文章
如何用 SwiftUI HotReload Objective-C 代码
Objective C - 循环后删除/隐藏 NSProgressIndicator
在Objective C的IQKeyboardManager中隐藏下一个上一个按钮