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中隐藏下一个上一个按钮

根据objective c中得到的json隐藏行和节

停止/隐藏 GTMSessionFetcher 日志 SwiftUI

iOS - 将 Objective-C 库项目导入 SwiftUI 项目